Jump to content

Recommended Posts

Posted (edited)

I'm having a lot of trouble getting renders to work, specifically with custom TNT. In it's current state, when I ignite a custom TNT block, creating an "EntityTNTLargePrimed", it becomes invisible.

 

Here is how I am registering my render in my preInit():

RenderingRegistry.registerEntityRenderingHandler(EntityTNTLargePrimed.class, new RenderTNTLargePrimed(Minecraft.getMinecraft().getRenderManager()));
        System.out.println("Registered RenderTNTLargePrimed from preint function");

I don't get any render related errors in the console and that system print statement correctly outputs to the console.

 

In my "RenderTNTLargePrimed" class, it's basically a copy and paste of "RenderTNTPrimed" from the base game.

package com.xeraster.supertnt.renders;

import com.xeraster.supertnt.SuperTNTMod;
import com.xeraster.supertnt.primedtnt.EntityTNTLargePrimed;

import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.BlockRendererDispatcher;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.entity.item.EntityTNTPrimed;
import net.minecraft.init.Blocks;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.MathHelper;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

@SideOnly(Side.CLIENT)
public class RenderTNTLargePrimed extends Render<EntityTNTLargePrimed>
{
    public RenderTNTLargePrimed(RenderManager renderManagerIn)
    {
        super(renderManagerIn);
        this.shadowSize = 0.5F;
    }

    /**
     * Renders the desired {@code T} type Entity.
     */
    public void doRender(EntityTNTLargePrimed entity, double x, double y, double z, float entityYaw, float partialTicks)
    {
        BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher();
        GlStateManager.pushMatrix();
        GlStateManager.translate((float)x, (float)y + 0.5F, (float)z);

        if ((float)entity.getFuse() - partialTicks + 1.0F < 10.0F)
        {
            float f = 1.0F - ((float)entity.getFuse() - partialTicks + 1.0F) / 10.0F;
            f = MathHelper.clamp(f, 0.0F, 1.0F);
            f = f * f;
            f = f * f;
            float f1 = 1.0F + f * 0.3F;
            GlStateManager.scale(f1, f1, f1);
        }

        float f2 = (1.0F - ((float)entity.getFuse() - partialTicks + 1.0F) / 100.0F) * 0.8F;
        bindEntityTexture(entity);
        GlStateManager.rotate(-90.0F, 0.0F, 1.0F, 0.0F);
        GlStateManager.translate(-0.5F, -0.5F, 0.5F);
        blockrendererdispatcher.renderBlockBrightness(SuperTNTMod.LARGE_TNT.getDefaultState(), entity.getBrightness());
        GlStateManager.translate(0.0F, 0.0F, 1.0F);

        if (this.renderOutlines)
        {
            GlStateManager.enableColorMaterial();
            GlStateManager.enableOutlineMode(this.getTeamColor(entity));
            blockrendererdispatcher.renderBlockBrightness(SuperTNTMod.LARGE_TNT.getDefaultState(), 1.0F);
            GlStateManager.disableOutlineMode();
            GlStateManager.disableColorMaterial();
        }
        else if (entity.getFuse() / 5 % 2 == 0)
        {
            GlStateManager.disableTexture2D();
            GlStateManager.disableLighting();
            GlStateManager.enableBlend();
            GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.DST_ALPHA);
            GlStateManager.color(1.0F, 1.0F, 1.0F, f2);
            GlStateManager.doPolygonOffset(-3.0F, -3.0F);
            GlStateManager.enablePolygonOffset();
            blockrendererdispatcher.renderBlockBrightness(SuperTNTMod.LARGE_TNT.getDefaultState(), 1.0F);
            GlStateManager.doPolygonOffset(0.0F, 0.0F);
            GlStateManager.disablePolygonOffset();
            GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
            GlStateManager.disableBlend();
            GlStateManager.enableLighting();
            GlStateManager.enableTexture2D();
        }

        GlStateManager.popMatrix();
        doRender(entity, x, y, z, entityYaw, partialTicks);
    }

    /**
     * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture.
     */
    protected ResourceLocation getEntityTexture(EntityTNTLargePrimed entity)
    {
        return TextureMap.LOCATION_BLOCKS_TEXTURE;
    }
}

 

I can't find any information on the internet about stuff that's relevant for fixing this. I did look in a really really old 1.7.2 mod that I made were entity renders for TNT work. The code appears to be:

EntityRegistry.registerGlobalEntityID(EntityTNTLargePrimed.class, "entitytntlarge", EntityRegistry.findGlobalUniqueEntityId());
        EntityRegistry.registerModEntity(EntityTNTLargePrimed.class, "entitytntlarge", 64, this, 256, 1, false);
        RenderingRegistry.registerEntityRenderingHandler(EntityTNTLargePrimed.class, new RenderTNTLargePrimed(Minecraft.getMinecraft().getRenderManager()));

where my rendering registry is but the problem is that in 1.12.2 that doesn't work. I get errors in the registerGlobalEntityID and registerModEntity lines.

 

On the registerGlobalEntityID, it doesn't like the ".findGlobalUniqueEntityId" part. The error just says "The method findGlobalUniqueEntityId() is undefined for the type EntityRegistry". If I backspace and then make a period, I don't see any functions even remotely close to findGlobalUniqueEntityId and when I just backspace it, it doesn't work either.

 

On the next line, the problem is with the registerModEntity function and the fact that I have (class extends Entity, String, int, Object, int, int, boolean) where it's expecting (ResourceLocation, class extends Entity, String, Object, int, int, boolean).

 

Does anybody know of either a workaround, another way to do this, or something I'm doing wrong that would otherwise allow this to work without those two lines of 1.7.2 code I can't hack into working? I'm thoroughly stumped with this.

Edited by Xeraster
Posted (edited)

OK but what do I replace it with in order to make that function actually execute? Do you mean to just not use registerGlobalEntityID at all? If that is what you mean, that solves half my problem but I still can't find a way to make it accept the "EntityRegistry.registerModEntity(EntityTNTLargePrimed.class, "entitytntlarge", 64, this, 256, 1, false);" line

 

Note that simply putting the line "RenderingRegistry.registerEntityRenderingHandler(EntityTNTLargePrimed.class, new RenderTNTLargePrimed(Minecraft.getMinecraft().getRenderManager()));" in client proxy doesn't fix it and renders still don't work like that.

Edited by Xeraster
Posted
  On 4/13/2018 at 1:32 AM, Xeraster said:

Do you mean to just not use registerGlobalEntityID at all?

Expand  

Correct. That's why there are mod IDs.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted (edited)

Ok well omitting the EntityRegistry.registerGlobalEntityID(blah blah blah) and EntityRegistry.registerModEntity(blah blah blah) lines causes the render animation to not show (not that it was showing before). Perhaps I need the EntityRegistry.registerModEntity line since it doesn't have "global id" in it as pointed out.

I am taking a stab in the dark here, but as far as converting the 1.7.2 code into something that will actually compile, I came up with:

@SideOnly(Side.CLIENT)
	@SubscribeEvent
	public static void onRegisterModels(ModelRegistryEvent event) {
EntityRegistry.registerModEntity(new ResourceLocation("EntityTNTLargePrimed"), EntityTNTLargePrimed.class, "entitytntlargeprimed", 64, SuperTNTMod.SUPER_TNT, 256, 1, false);
		RenderingRegistry.registerEntityRenderingHandler(EntityTNTLargePrimed.class, new RenderTNTLargePrimed(Minecraft.getMinecraft().getRenderManager()));
}

 

Now it just crashes on start up. What can I do now?

Edited by Xeraster
Posted
  On 4/13/2018 at 1:54 AM, Xeraster said:

Ok well omitting the EntityRegistry.registerGlobalEntityID(blah blah blah) and EntityRegistry.registerModEntity(blah blah blah) lines causes the render animation to not show (not that it was showing before). Perhaps I need the EntityRegistry.registerModEntity line since it doesn't have "global id" in it as pointed out.

Expand  

You need one of them, otherwise the game doesn't know that your entity exists and can't serialize it.

And one of the two is wrong.

So you absolutely positively need the other one.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted
  On 4/13/2018 at 1:54 AM, Xeraster said:

Ok well omitting the EntityRegistry.registerGlobalEntityID(blah blah blah) and EntityRegistry.registerModEntity(blah blah blah) lines causes the render animation to not show (not that it was showing before). Perhaps I need the EntityRegistry.registerModEntity line since it doesn't have "global id" in it as pointed out.

I am taking a stab in the dark here, but as far as converting the 1.7.2 code into something that will actually compile, I came up with:

@SideOnly(Side.CLIENT)
	@SubscribeEvent
	public static void onRegisterModels(ModelRegistryEvent event) {
EntityRegistry.registerModEntity(new ResourceLocation("EntityTNTLargePrimed"), EntityTNTLargePrimed.class, "entitytntlargeprimed", 64, SuperTNTMod.SUPER_TNT, 256, 1, false);
		RenderingRegistry.registerEntityRenderingHandler(EntityTNTLargePrimed.class, new RenderTNTLargePrimed(Minecraft.getMinecraft().getRenderManager()));
}

 

Now it just crashes on start up. What can I do now?

Expand  

Don't register either of those dduring modelregistry event those are for blocks/items only. Register it once via your client proxy. Call the other on both server and client

Posted (edited)

What do I put for the first argument of the EntityRegistry.registerModEntity function? RenderTNTLargePrimed is what would make sense but that gives me an error. What ResouceLocation variable can I put in there that will not only keep the game from crashing, but cause my render to actually work? Putting null crashes it. Entering a new ResourceLocation(SuperTNTMod.MODID, "RenderTNTLargePrimed") crashes it. I have only been able to crash it or get errors by using that line.

 

What do I do for the ResourceLocation variable?

 

Update: I changed that one line to

EntityRegistry.registerModEntity(new ResourceLocation(SuperTNTMod.MODID + ":textures/blocks/largetnt_side.png"), EntityTNTLargePrimed.class, "EntityTNTLargePrimed", 0, SuperTNTMod.MODID, 128, 1, false);

 

Now, it waits until I ignite the TNT to crash.

 

So.. close...

 

Also, here is my crash log:

  Reveal hidden contents

 

Edited by Xeraster
Posted

It's a registry name, it doesn't point AT anything.

new ResourceLocation(SuperTNTMod.MODID + ":large_tnt")

...is fine, its just used as the registry name.

 

Also, resource locations should never include a file type (do your blocks and items? no).

  On 4/13/2018 at 2:15 AM, Xeraster said:

Caused by: java.lang.NullPointerException
    at net.minecraft.client.renderer.entity.Render.bindTexture(Render.java:130) ~[Render.class:?]

Expand  

The texture referenced by your renderer is null. Namely, this line:

 

  On 4/13/2018 at 12:01 AM, Xeraster said:

bindEntityTexture(entity);

Expand  

 

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted (edited)

OK I'm getting warmer but still no cigar. In my RenderTNTLargePrimed class file, I replaced:

 protected ResourceLocation getEntityTexture(EntityTNTLargePrimed entity)
    {
        return TextureMap.LOCATION_BLOCKS_TEXTURE;
    }

with:

@Override
    protected ResourceLocation getEntityTexture(Entity entity)
    {
        return TextureMap.LOCATION_BLOCKS_TEXTURE;
    }

which Draco18s expertly pointed out was causing a problem.

 

Now, I can put the line:

EntityRegistry.registerModEntity(new ResourceLocation(SuperTNTMod.MODID, "largetnt"), EntityTNTLargePrimed.class, "EntityTNTLargePrimed", 0, SuperTNTMod.MODID, 128, 1, false);

in my init function. Putting it anywhere else makes it crash on startup. Doing this makes it damn-near almost work. When I ignite the tnt, it shows up as a white, textureless cube along with the fuse burning particles. Interestingly enough, the console doesn't actually output any errors like it does if I use anything other than "largetnt" for the ResourceLocation part after my ModId. Here is my console log:

  Reveal hidden contents

Here is a screenshot of what it looks like when I do this:

https://imgur.com/a/0tDKg

Adding in the deprecated ""RenderingRegistry.registerEntityRenderingHandler(blah blah blah)" as previously pointed out to not use, causes the white textureless box to not show at all, but will show the fuse burning particles and shadow. I makes no difference if I put it before or after the EntityRegistry line. The console log is completely the same whether I put that line in there, whether its before EntityRegistry or after EntityRegistry.

 

I think maybe it has to do with the resource location part in my render class. Changing it to return something like "new ResourceLocation(SuperTNTMod.MODID, "largetnt")" or "new ResourceLocation(SuperTNTMod.MODID, "textures/blocks/largetnt_side")" doesn't actually seem to do anything.

Am I correct to guess that this is where the last problem is or am I barking up the wrong tree?

 

Also, I have changed my RenderTNTLargePrimed file. Here is what it looks like right now.

package com.xeraster.supertnt.renders;

import com.xeraster.supertnt.SuperTNTMod;
import com.xeraster.supertnt.primedtnt.EntityTNTLargePrimed;

import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.BlockRendererDispatcher;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityTNTPrimed;
import net.minecraft.init.Blocks;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.MathHelper;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

@SideOnly(Side.CLIENT)
public class RenderTNTLargePrimed extends Render<EntityTNTLargePrimed>
{
    public RenderTNTLargePrimed(RenderManager renderManagerIn)
    {
        super(renderManagerIn);
        this.shadowSize = 0.5F;
    }

    /**
     * Renders the desired {@code T} type Entity.
     */
    public void doRender(EntityTNTLargePrimed entity, double x, double y, double z, float entityYaw, float partialTicks)
    {
        BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher();
        GlStateManager.pushMatrix();
        GlStateManager.translate((float)x, (float)y + 0.5F, (float)z);

        if ((float)entity.getFuse() - partialTicks + 1.0F < 10.0F)
        {
            float f = 1.0F - ((float)entity.getFuse() - partialTicks + 1.0F) / 10.0F;
            f = MathHelper.clamp(f, 0.0F, 1.0F);
            f = f * f;
            f = f * f;
            float f1 = 1.0F + f * 0.3F;
            GlStateManager.scale(f1, f1, f1);
        }

        float f2 = (1.0F - ((float)entity.getFuse() - partialTicks + 1.0F) / 100.0F) * 0.8F;
        //bindEntityTexture(entity);
        bindEntityTexture(entity);
        GlStateManager.rotate(-90.0F, 0.0F, 1.0F, 0.0F);
        GlStateManager.translate(-0.5F, -0.5F, 0.5F);
        blockrendererdispatcher.renderBlockBrightness(SuperTNTMod.LARGE_TNT.getDefaultState(), entity.getBrightness());
        GlStateManager.translate(0.0F, 0.0F, 1.0F);

        if (this.renderOutlines)
        {
            GlStateManager.enableColorMaterial();
            GlStateManager.enableOutlineMode(this.getTeamColor(entity));
            blockrendererdispatcher.renderBlockBrightness(SuperTNTMod.LARGE_TNT.getDefaultState(), 1.0F);
            GlStateManager.disableOutlineMode();
            GlStateManager.disableColorMaterial();
        }
        else if (entity.getFuse() / 5 % 2 == 0)
        {
            GlStateManager.disableTexture2D();
            GlStateManager.disableLighting();
            GlStateManager.enableBlend();
            GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.DST_ALPHA);
            GlStateManager.color(1.0F, 1.0F, 1.0F, f2);
            GlStateManager.doPolygonOffset(-3.0F, -3.0F);
            GlStateManager.enablePolygonOffset();
            blockrendererdispatcher.renderBlockBrightness(SuperTNTMod.LARGE_TNT.getDefaultState(), 1.0F);
            GlStateManager.doPolygonOffset(0.0F, 0.0F);
            GlStateManager.disablePolygonOffset();
            GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
            GlStateManager.disableBlend();
            GlStateManager.enableLighting();
            GlStateManager.enableTexture2D();
        }

        GlStateManager.popMatrix();
        doRender(entity, x, y, z, entityYaw, partialTicks);
    }

    /**
     * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture.
     */
    @Override
    protected ResourceLocation getEntityTexture(EntityTNTLargePrimed entity)
    {
        return TextureMap.LOCATION_BLOCKS_TEXTURE;
    }
    
    

}

 

Edit: Well if I put any console output commands into my render's doRender function, it doesn't get executed. This means that there's still a problem with my registering. This is really frustrating though because if I change ANYTHING having to do with registering renders, it either functions even worse or crashes.

I'm amazed at the convoluted complexity of this.

 

Another edit: @diesieben07

I would love to try your suggestion of using EntityEntryBuilder except that I can't find documentation on how to use it, a working example of how to use it or how to do it myself through trial and error. Could you point me to a source of documentation or shed more light on this? Typing "EntityEntryBuilder.BuiltEntityEntry()" won't give me that one tooltip with what arguments the function accepts.

Edited by Xeraster
Posted (edited)
  On 4/14/2018 at 11:36 PM, diesieben07 said:

You use EntityEntryBuilder (it follows the builder pattern, look it up if you are not familiar with it), not BuiltEntityEntry. Once you've built it you can register it the registry in the above mentioned event.

 

As for your issue with the rendering, you are not registering your entity renderer. I also told you how to do that above.

Expand  

With all due respect, I don't agree with the statement that you told me how to do this above. I guess I'm just still missing something somewhere.

 

After Googleing, I think I'm supposed to establish a variable entity at the top so it looks like: public static final EntityEntry LARGE_TNT_ENTITY = new EntityEntry(EntityTNTLargePrimed.class, SuperTNTMod.MODID + ":large_tnt_primed") at the top where all my blocks get their variables set?

 

So I know I'm supposed to have a RegistryEvent function. I didn't have this before. I made that just now. It looks like this:

@SubscribeEvent
	public static void registerStuff(RegistryEvent.Register<EntityEntry> event) {
	    //event.getRegistry().register([EntityEntry]);
		System.out.println("registerStuff got executed");
		LARGE_TNT_ENTITY.setRegistryName(SuperTNTMod.MODID, "large_tnt_1");
		event.getRegistry().register(LARGE_TNT_ENTITY);
		EntityRegistry.registerModEntity(new ResourceLocation(SuperTNTMod.MODID, "largetnt_1"), EntityTNTLargePrimed.class, "largetnt_1", 0, SuperTNTMod.MODID, 128, 1, false);
	}

I was previously putting the EntityRegistry line in my init. Doing this makes it execute and I get the white cube too though.

 

What I can't find really find from Google is where and what I'm supposed to do with a EntityEntryBuilder statement and how to make one. I do observe that at no point in my current code are EntityLargeTNTPrimed and RenderLargeTNTPrimed linked to each-other in any way and according to common sense, this has to be done. The fact that none of my console comments in the RenderTNTLargePrimed never get executed supports this theory. Perhaps if I knew the correct syntax and intended use of EntityEntryBuilder, I could do this? You told me to register my renderer and put it in my preinit. Is this what EntityEntryBuilder does?

 

Hey but thank you so much for helping so far. I hope I get this working soon.

Edited by Xeraster
Posted

I'm really struggling to grasp an understanding of this EntityEntryBuilder idea here. The best documentation I can find is here: http://maven.thiakil.com/forge-1.12-javadoc/net/minecraftforge/fml/common/registry/EntityEntryBuilder.html

but it's still pretty vague and not very helpful at least to me.

 

Is EntityEntryBuilder a type of variable? Is it a function?

You said EntityRegistry as I'm currently using it doesn't fully do the job. So I've been trying stuff like:

EntityRegistration fff = new EntityRegistry.EntityRegistration(SuperTNTMod.ModContainer, LARGE_TNT_ENTITY.getRegistryName(), LARGE_TNT_ENTITY.getEntityClass(), LARGE_TNT_ENTITY.getName(), 0, 128, 1, false);
		EntityEntryBuilder.create(fff);

which might work if mod container was a variable I knew how to reproduce.

Is this how that is supposed to work? If so, how do I satisfy the mod container variable? Where do I get ModContainer from?

Posted (edited)

Sorry to double post but I finally did get it working!!

Here is what I did:

1. Go to my RenderLargeTNTPrimed class file. On line 86, comment out the line:

doRender(entity, x, y, z, entityYaw, partialTicks);

 

2. In my main classes init() function, put:

RenderingRegistry.registerEntityRenderingHandler(LARGE_TNT_ENTITY.getEntityClass(), new RenderTNTLargePrimed(Minecraft.getMinecraft().getRenderManager()));

 

3. In my client proxy function which has "RegistryEvent.Register<EntityEntry> event", make sure it contains the following code in this particular and very specific order:

LARGE_TNT_ENTITY.setRegistryName(SuperTNTMod.MODID, "large_tnt_1");
		event.getRegistry().register(LARGE_TNT_ENTITY);
		EntityRegistry.registerModEntity(LARGE_TNT_ENTITY.getRegistryName(), LARGE_TNT_ENTITY.getEntityClass(), LARGE_TNT_ENTITY.getName(), 0, SuperTNTMod.MODID, 128, 1, false);

 

4. Make sure this is at the top of whatever class I have the above code in:

public static final EntityEntry LARGE_TNT_ENTITY = new EntityEntry(EntityTNTLargePrimed.class, SuperTNTMod.MODID + ":large_tnt_primed");

 

So there. Now as soon as I figure out how to use this EntityEntryBuilder system that diesieben07 is talking about, it will probably be more efficient but I'm just happy it's working now finally.

Edited by Xeraster
Posted (edited)
  On 4/15/2018 at 11:46 AM, diesieben07 said:

but your failure to understand it from looking at the code shows that you are lacking basic understanding of Java. Did you look up the builder pattern like I told you multiple times?

 

EntityEntry entry = EntityEntryBuilder.create()
  .entity(MyEntity.class)
  .id("my_entity", 1)
  .name("mymod.my_entity.name")
  .tracker(range, updateFrequency, sendVelocityUpdates)
  //further settings such as spawning here
  .build();

event.getRegistry().register(entry);

It's really not that hard...

Expand  

Well I made this mod a long time ago in 1.7.2 back when the structure of Minecraft made more sense and wasn't nearly as cryptic and convoluted, and the stuff that was that bad had much better documentation. Even software development for the friggin Super Nintendo is more straightforward and less cryptic than this, which I know from experience. I've written lots of other software in lots of languages including Java, so say whatever you want. The difficulty I have been having comes from how they've just reinvented the wheel on a number of things having to do with Minecraft's code and adequate documentation for a lot of it just isn't there.

Yes I did look it up. Multiple times. And with slightly different search terms each time. And even went back several pages on Google search, still not finding what I needed.. I couldn't find anything giving me actually helpful or complete enough information so I had to resort to figuring it out myself through trial and error until I came up with a temporary way to get it working myself which just happened to not be the official way that works the best.

This is the first time I have even seen anything close to what you've pasted here and I look forward using this and seeing if I can get it to work like that. Thank you for posting that.

Edited by Xeraster

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



×
×
  • Create New...

Important Information

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