Jump to content

Stained Glass mod


gotyaoi

Recommended Posts

It works similarly to cactus, but only for the top of the block, and it deals 1 heart of damage per attack, adding "fuel" to it's internal storage based on the type of mob. It will store the "fuel" if it doesn't have any work to do.

Link to comment
Share on other sites

  • Replies 132
  • Created
  • Last Reply

Top Posters In This Topic

You now realise you're gonna have to get some way to upgrade the furnace's speed/capacity using baby animals.

Probably using baby monsters in 1.3, like the baby zombies, or the ultimate boost, baby zombie testificates.

Link to comment
Share on other sites

How does one actually go about finding these baby monsters, anyway? Besides a baby testificate getting infected, there doesn't appear to be any way to get them to spawn besides modding them in.

First, find two zombies that really love each other. Gently place a fence around them, and then, let the magic happen.

Seriously, I have no idea. But I think the most logic would be that they appear like baby mobs, no?

Link to comment
Share on other sites

Oh, and in the "Oh my god minecraft why do you suck so much" category, I'm rediscovering what the modder of this thread meant when he was talking about the pain of trying to do alpha rendering. The pixel buffer does not have an alpha channel (and why the fuck not, Notch, why) so masking via multiplass blending doesn't work. Trying to use the secondary pixel buffer (normally used for the lightmap) and texture combiners fails because so much state is half-assed assumed throughout the code, that everything -except- the lightmap gets borked, and after all that still manages to completely ignore the existence of the second texture somehow.

I am going to beat, hammer, and ASSAULT Minecraft with every tool at my disposal until it bends to my will and does as I say. IT WILL BE MY BITCH.

Link to comment
Share on other sites

My friends who complain of minor bugs like complaining of there minecraft is crashing a bit more than usual but they play in t 24/7 so i think its just them. The only other think is when i craft some stained glass i get like two more than i should of and then they disappear back to the right amount and it makes my minecraft a bit laggy for a bit until i place the glass.

Link to comment
Share on other sites

It's been a while since I looked at your code (or even the earlier pages of this thread), but I wonder if this doesn't work, now that I've had a chance to delve into Minecraft graphics programming more.

If you were to create a texture file that uses partial transparency by alpha, and then do this...

GL11 . glEnable ( GL11 . GL_BLEND ) ;

GL11 . glBlendFunc ( GL11 . GL_SRC_ALPHA , GL11 . GL_ONE_MINUS_SRC_ALPHA ) ;

 

/* render quads */

 

GL11 . glDisable ( GL11 . GL_BLEND ) ;

...would it not work? I was able to (accidentally, but hey) achieve a partially-transparent blue block in my hand via IItemRenderer, and I don't see why it wouldn't work in renderWorldBlock or a TileEntitySpecialRenderer, because it operates directly onto the framebuffer using the source's alpha, and is not hindered by the lack of alpha bitplanes in the destination buffer nor does it require being done on a special alpha pass. It would even work to layer multiple transparent quads on top of each other.

So, in theory, you should be able to remove the base-class modification, and just let back-face culling take care of it, for both the glass blocks and glass panes. Yes, no, maybe so?

Link to comment
Share on other sites

I think it should work.

By the way, I just figured out how to make and use GLSL shaders in Minecraft. \o/ They're sweet. I made one that can take image A as a mask (using only the alpha values) and apply arbitrary subimage of image B as the texture being masked.

Between you and me, Minecraft graphical-flexibility is taking a gigantic leap forward.

Link to comment
Share on other sites

Hmm, had a chance to give it a try this evening after all. unfortunately, adding it to my custom renderer not only made my blocks completely opaque, but did the same for all other alpha rendered blocks. Very strange. I looked up a little bit on openGL, and apparently when using that technique, it's important to be able to control the order that things render in, so maybe that's what's messing up?

Edit: Did a little more testing, and it appears that it only causes every other transparent block to go opaque if it's set to the alpha render pass. If I set it to the normal pass, my block is still opaque, but everything else is fine. *shrug* I'll keep playing around with it perhaps.

Edit2: There is also the possibility that this is related to my graphics card, as I'm under the impression that that has a lot to do with how well openGL stuff works, and mine isn't exactly the newest.

Edit3: Ok, new discovery, apparently the thing that was causing everything to be opaque was disabling blending at the end of my function. Blending appears to be enabled and disable at other parts of the code, so I was doing something it didn't expect.

Edit4: So, if the only openGL things I do in my render function is enable blending and set the blend function near the beginning, then you can see my panes through each other, but you can see nothing else besides the horizon.

Link to comment
Share on other sites

Well, that is something I hadn't considered: Because there are no alpha bitplanes in the rendering context, after the blending occurs during your draw call, the alpha bits are discarded, so anything drawn after you that is further on the depth plane will get culled. Hmm. It would work if you could guarantee somehow that you are the last thing to be drawn.

Notch really did everything ass-backward, didn't he.

I created an item-rendering function that allows me to specify a shape once and use it for all modes, instead of having to re-design the shape three times, and these are the lengths to which I had to go:

    @Override

    public void renderItem ( ItemRenderType Type , ItemStack Item , Object ... Arguments )

    {

        GL11 . glPushMatrix ( ) ;

 

        RenderUtil . EnableTransparency ( ) ;

 

        if ( Type == ItemRenderType . INVENTORY )

        {

            GL11 . glScaled ( 16 , 16 , 1 ) ;

 

            GL11 . glDisable ( GL11 . GL_LIGHTING ) ;

 

            GL11 . glFrontFace ( GL11 . GL_CW ) ;

 

            GL11 . glMatrixMode ( GL11 . GL_TEXTURE ) ;

 

            GL11 . glPushMatrix ( ) ;

 

            GL11 . glScaled ( 1 , -1 , 1 ) ;

 

            GL11 . glTranslated ( 0 , 1 , 0 ) ;

 

            GL11 . glMatrixMode ( GL11 . GL_MODELVIEW ) ;

 

            Render ( Tessellator . instance , Item ) ;

 

            GL11 . glMatrixMode ( GL11 . GL_TEXTURE ) ;

 

            GL11 . glPopMatrix ( ) ;

 

            GL11 . glMatrixMode ( GL11 . GL_MODELVIEW ) ;

 

            GL11 . glFrontFace ( GL11 . GL_CCW ) ;

 

            GL11 . glEnable ( GL11 . GL_LIGHTING ) ;

        }

        else if ( Type == ItemRenderType . ENTITY )

        {

            GL11 . glRotatef ( 180 - RenderManager . instance . playerViewY , 0 , 1 , 0 ) ;

 

            GL11 . glTranslated ( -0.5 , -0.25 , 0 ) ;

 

            Render ( Tessellator . instance , Item ) ;

        }

        else if ( Type == ItemRenderType . EQUIPPED )

        {

            GL11 . glFrontFace ( GL11 . GL_CW ) ;

 

            GL11 . glMatrixMode ( GL11 . GL_TEXTURE ) ;

 

            GL11 . glPushMatrix ( ) ;

 

            GL11 . glScaled ( -1 , 1 , 1 ) ;

 

            GL11 . glTranslated ( 1 , 0 , 0 ) ;

 

            GL11 . glMatrixMode ( GL11 . GL_MODELVIEW ) ;

 

            Render ( Tessellator . instance , Item ) ;

 

            GL11 . glMatrixMode ( GL11 . GL_TEXTURE ) ;

 

            GL11 . glPopMatrix ( ) ;

 

            GL11 . glMatrixMode ( GL11 . GL_MODELVIEW ) ;

 

            GL11 . glFrontFace ( GL11 . GL_CCW ) ;

        }

 

        RenderUtil . DisableTransparency ( ) ;

 

        GL11 . glPopMatrix ( ) ;

    }

No wonder the big modders want to get paid for this stuff. :P

Link to comment
Share on other sites

  • 2 weeks later...

Ooooh tented windows would be pretty G! I like it man. I hope you can get the glass panes working though.

I'm not sure how many of this threads pages your read, but I did get the panes working.

On a release note, I'll post something up as soon as I get some textures for the new block. Here's a little changelog in advance, in case anyone has any suggestions.

  • The Glass Furnace now requires both a lava source block next to it and ground up animals to work. I can hold a maximum of 100 units of ground up animals.
  • You can upgrade the Glass Furnace to the Sated Glass Furnace by completely filling it's internal buffer of ground up animals and putting 5 lava source blocks next to it, then feeding it one more baby animal.
  • The Sated Glass Furnace has double the ground up animal capacity, each thing it eats provides double value and it makes stained glass twice as fast.
  • Still only three block IDs! The Glass furnace now uses metadata to track facing, on/off state and whether it's upgraded or not. 4 directions X 2 states X 2 blocks = all the metadata, but it works.

Link to comment
Share on other sites

Using the metadata that way is smart. Technically, any mod anywhere could be collapsed to a single block ID by reading/writing NBT, but that gets expensive very quickly. (Not that some mods don't do it that way already. I have to assume the Ender Storage mod does that in the title entity, since it has way more than 16 combinations of colours for the top, and I'd expect Mystcraft does it too, reading the name of the book out of the ItemStack's NBT.)

Since expanded-IDs is baked into 1.3+Forge now, I'd recommend just sticking to what the 4 bits in the block metadata and the 31 bits in the itemstack damage can handle, for efficiency's sake.

(In summary: You're awesome, so keep it up. :P)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Announcements

  • Anything claiming to be official Technic servers are not allowed here, for obvious reasons



×
×
  • Create New...