Jump to content

Recommended Posts

Posted

Hi, I just setup proxies on my mod, but no matter what I try my game always crashes.

 

TutorialCommonProxy:

package com.hurleyboarder.Main;

public class TutorialCommonProxy {

}

 

ClientProxy:

package com.hurleyboarder.Main;

import cpw.mods.fml.client.registry.RenderingRegistry;

public class ClientProxy extends TutorialCommonProxy{

public void registerRenderThing(){

}


}


 

MainRegistry:

package com.hurleyboarder.Main;

import net.minecraft.block.Block;

import net.minecraft.block.material.Material;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.Item.ToolMaterial;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.EnumHelper;

import com.hurleyboarder.lib.RefStrings;
import com.hurleyboarder.tools.BedAxe;
import com.hurleyboarder.tools.BedHoe;
import com.hurleyboarder.tools.BedPick;
import com.hurleyboarder.tools.BedShovel;
import com.hurleyboarder.tools.BedSword;
import com.hurleyboarder.tools.EAxe;
import com.hurleyboarder.tools.EHoe;
import com.hurleyboarder.tools.EPick;
import com.hurleyboarder.tools.ESpade;
import com.hurleyboarder.tools.ESword;

import come.hurleyboarder.food.FoodDApple;
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.FMLPreInitializationEvent;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;


@Mod(modid = RefStrings.MODID, name =RefStrings.NAME , version =RefStrings.VERSION )
public class MainRegistry {


public final static Block Nuke = new Nuke(6000, Material.tnt);

public final static Block GoldFurnace = new GoldFurnace(false);

public final static Item ItemBow = new ItemBow();

public final static Item EArrow = new ItemEArrow(5006);

//Food
public final static Item DiamondApple = new FoodDApple(5011, 10, true);

//Tools Material
public static ToolMaterial Emeraldt = EnumHelper.addToolMaterial("Emerald Tool Material", 3, 2000, 15.0f, 4.0f, 25);

public static ToolMaterial BedRock = EnumHelper.addToolMaterial("BedRock Tool Material ", 3, 3000, 18.0f, 5.0f, 30);

@Instance("tutorial")
public static MainRegistry instance;

@SidedProxy(clientSide="com.hurleyboarder.main.TutorialClientProxy", serverSide="telinc.tutorialmod.common.TutorialCommonProxy")
public static TutorialCommonProxy proxy;



@EventHandler
public static void PreLoad (FMLPreInitializationEvent Event){


}



@EventHandler
public static void Load (FMLInitializationEvent Event)
{

   }
}

Posted

You have several mistakes in this line:

@SidedProxy(clientSide="com.hurleyboarder.main.TutorialClientProxy", serverSide="telinc.tutorialmod.common.TutorialCommonProxy")

 

First of all, based on your package declarations, the client proxy is in com.hurleyboarder.Main with a capital "M".

 

Secondly, your common proxy is in a totally different package than what you wrote.  It is also in com.hurleyboarder.Main not telinc.tutorialmod.common.

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Posted
  On 10/6/2014 at 4:05 AM, hurleyboarder said:

Thanks so much that worked. Oh and it was in a totally different place because I got it from the forge wiki

 

I know but the first thing you must learn when using tutorials is to go through every line, make sure you understand them, and then edit them to suit your mod.  It is rare that copy and paste just works.  So always go through every line very carefully.  Have fun modding!

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Posted

Doesn't the common proxy need an empty "public void registerRenderThing()" that the client proxy will override with something non-trivial?

 

BTW, rather than a method name like "registerRenderThing", you can mimic the Main class method names that do the calling. In other words, your proxies can parallel your Main class's PreLoad(), Load() sequence. Your common proxy can even do all the real work that's in those Main methods. The client proxy can call its super before doing a few client-only steps.

 

What you'd be left with in each Main method is a simple call to the corresponding proxy.method. It's not necessary (and maybe not even good style), but see it that way once and suddenly proxies make perfect sense.

The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting.

Posted
  On 10/7/2014 at 7:22 PM, jeffryfisher said:

Doesn't the common proxy need an empty "public void registerRenderThing()" that the client proxy will override with something non-trivial?

 

BTW, rather than a method name like "registerRenderThing", you can mimic the Main class method names that do the calling. In other words, your proxies can parallel your Main class's PreLoad(), Load() sequence. Your common proxy can even do all the real work that's in those Main methods. The client proxy can call its super before doing a few client-only steps.

 

What you'd be left with in each Main method is a simple call to the corresponding proxy.method. It's not necessary (and maybe not even good style), but see it that way once and suddenly proxies make perfect sense.

 

Yes, the way I do it is have main methods that handle the FML lifecycle events (pre-init, init, etc) that call proxy methods of same name.  The client proxy should extend common proxy and for any method in client proxy, it should have same method in common proxy which is overridden by client method.

 

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

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

    • just rewatched the tutorial and my code is exactly the same as kaupenjoe's.  the item is added into the game but like i said to start it doesnt have a texture or a proper name for whatever reason.
    • yes the name is en_us.json and it is in resources -> assests -> testmod -> lang folders.  i have checked my code and am pretty confident that the code itself is correct.  i even tried loading the project in eclipse and it has the same problems, I think i will just rewatch the whole tutorial and will give an update on the situation.
    • same error, I also tried removing Valkyrian skies as well because I noticed it coming up a lot in the debug log errors
    • Hey man,    i have only been modding Minecraft for a few days but maybe I can help you. First of all make sure to follow every step of Kaupenjoe's tutorial, I found it to been very helpful and complete. The game uses the raw translation key for the item (in your case "item.testmod.alexandrite") if it can't find the correct lang file. Make sure it's name is "en_us.json" and it is saved under "ressources" -> "assets" -> "testmod".
    • whenever I try to get this item to render into the game it appears with the not texture purple and black squares and calls itself by the lang translation file path instead of the name i gave it.   { "item.testmod.alexandrite": "Alexandrite" } this is the lang json file package net.Hurst.testmod.item; import net.Hurst.testmod.TestMod; import net.minecraft.world.item.Item; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; public class ModItems { public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, TestMod.MOD_ID); public static final RegistryObject<Item> ALEXANDRITE = ITEMS.register("alexandrite", () -> new Item(new Item.Properties())); public static void register(IEventBus eventBus){ ITEMS.register(eventBus); } } this is my ModItems.java file package net.Hurst.testmod; import com.mojang.logging.LogUtils; import net.Hurst.testmod.item.ModItems; import net.minecraft.world.item.CreativeModeTabs; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; import net.minecraftforge.event.server.ServerStartingEvent; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.config.ModConfig; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import org.slf4j.Logger; // The value here should match an entry in the META-INF/mods.toml file @Mod(TestMod.MOD_ID) public class TestMod { public static final String MOD_ID = "testmod"; private static final Logger LOGGER = LogUtils.getLogger(); public TestMod() { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); modEventBus.addListener(this::commonSetup); ModItems.register(modEventBus); MinecraftForge.EVENT_BUS.register(this); modEventBus.addListener(this::addCreative); ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, Config.SPEC); } private void commonSetup(final FMLCommonSetupEvent event) { } // Add the example block item to the building blocks tab private void addCreative(BuildCreativeModeTabContentsEvent event) { if(event.getTabKey() == CreativeModeTabs.INGREDIENTS){ event.accept(ModItems.ALEXANDRITE); } } // You can use SubscribeEvent and let the Event Bus discover methods to call @SubscribeEvent public void onServerStarting(ServerStartingEvent event) { } // You can use EventBusSubscriber to automatically register all static methods in the class annotated with @SubscribeEvent @Mod.EventBusSubscriber(modid = MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) public static class ClientModEvents { @SubscribeEvent public static void onClientSetup(FMLClientSetupEvent event) { } } } this is my TestMod.java file { "parent": "minecraft:item/generated", "textures": { "layer0": "testmod:item/generated" } } this is my model file for the item. I am using intellij 2025.1.2 with fdk 1.21 and java 21 I would appreciate the help.
  • Topics

×
×
  • Create New...

Important Information

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