Jump to content

Help Stuck at TileEntity for my block (water lvl)


EarthGuardian

Recommended Posts

hellow, i am stuck at my TileEntity (shown below)

 

i cant seem to figure out when i put my bucket of water in and it adds to the water lvl all the other blocks i have placed in the worl get the same water added*

(its does show up in the gui as well and when i print int to chat as a variable is does to) even tho i dint add the water bucket there.

 

the blocks where i dint add the water still know they have water becouse when i add fuel item in the fuel slot it turns on even tho i dint add the water at that block ..

so why does it share this ?? ( its practicly the same handling as the flame(burn) Time that goes from up to down)

 

 

the class:

 

package Earth.Combiner.Utilety.CoalHeaterUtilety;

import Earth.Combiner.CombinerCore;
import Earth.Combiner.Blocks.CoalHeater;
import Earth.Combiner.ItemTools.InitItemTools;
import Earth.Combiner.lib.Ints;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemHoe;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemSword;
import net.minecraft.item.ItemTool;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.src.ModLoader;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.common.ForgeDummyContainer;

public class TileEntityCoalHeater extends TileEntity implements ISidedInventory
{
/** toegankelijk heid van de kanten (ik denk voor andere mods zoals buildcraft enzo). */
    private static final int[] slots_top = new int[] {0};
    private static final int[] slots_bottom = new int[] {2, 1};
    private static final int[] slots_sides = new int[] {1};

    /** Hoeveleheid slots. */
    private ItemStack[] coalheatereItemStacks = new ItemStack[5];

    /** mechaniek variabelen */
    public int BurnTime;
    public static int BurnTimeB;
    public int canBurn;
    public int currentBurnTime;
    public static int waterLvl;
    public int waterAmount;
    //public int combmachineCombDCurTime;
    //public int NumberOfSlots;
    private String field_94130_e;

    public int getSizeInventory()
    {
        return this.coalheatereItemStacks.length;
    }

    public ItemStack getStackInSlot(int par1)
    {
        return this.coalheatereItemStacks[par1];
    }

    public ItemStack decrStackSize(int par1, int par2)
    {
        if (this.coalheatereItemStacks[par1] != null)
        {
            ItemStack itemstack;

            if (this.coalheatereItemStacks[par1].stackSize <= par2)
            {
                itemstack = this.coalheatereItemStacks[par1];
                this.coalheatereItemStacks[par1] = null;
                return itemstack;
            }
            else
            {
                itemstack = this.coalheatereItemStacks[par1].splitStack(par2);

                if (this.coalheatereItemStacks[par1].stackSize == 0)
                {
                    this.coalheatereItemStacks[par1] = null;
                }

                return itemstack;
            }
        }
        else
        {
            return null;
        }
    }

    /** Als je hem sloopt dropt hij de items. */
    public ItemStack getStackInSlotOnClosing(int par1)
    {
        if (this.coalheatereItemStacks[par1] != null)
        {
            ItemStack itemstack = this.coalheatereItemStacks[par1];
            this.coalheatereItemStacks[par1] = null;
            return itemstack;
        }
        else
        {
            return null;
        }
    }

    public void setInventorySlotContents(int par1, ItemStack par2ItemStack)
    {
        this.coalheatereItemStacks[par1] = par2ItemStack;

        if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit())
        {
            par2ItemStack.stackSize = this.getInventoryStackLimit();
        }
    }

    public String getInvName()
    {
        return this.isInvNameLocalized() ? this.field_94130_e : "Coal Heater";
    }

    public boolean isInvNameLocalized()
    {
        return this.field_94130_e != null && this.field_94130_e.length() > 0;
    }

    public void setGuiDisplayName(String par1Str)
    {
        this.field_94130_e = par1Str;
    }

    public void readFromNBT(NBTTagCompound par1NBTTagCompound)
    {
        super.readFromNBT(par1NBTTagCompound);
        NBTTagList nbttaglist = par1NBTTagCompound.getTagList("Items");
        this.coalheatereItemStacks = new ItemStack[this.getSizeInventory()];

        for (int i = 0; i < nbttaglist.tagCount(); ++i)
        {
            NBTTagCompound nbttagcompound1 = (NBTTagCompound)nbttaglist.tagAt(i);
            byte b0 = nbttagcompound1.getByte("Slot");

            if (b0 >= 0 && b0 < this.coalheatereItemStacks.length)
            {
                this.coalheatereItemStacks[b0] = ItemStack.loadItemStackFromNBT(nbttagcompound1);
            }
        }

        this.BurnTime = par1NBTTagCompound.getShort("BurnTime");
        this.waterLvl = par1NBTTagCompound.getShort("WaterLVL");
        this.currentBurnTime = par1NBTTagCompound.getShort("CurrBurn");
        //this.combmachineCombDCurTime = par1NBTTagCompound.getShort("CombDurTime");
        //this.currentBurnTime = getBurnHeaterTime(this.coalheatereItemStacks[ints.BURNSLOT]);

        if (par1NBTTagCompound.hasKey("Coal Heater"))
        {
            this.field_94130_e = par1NBTTagCompound.getString("Coal Heater");
        }
    }

    public void writeToNBT(NBTTagCompound par1NBTTagCompound)
    {
        super.writeToNBT(par1NBTTagCompound);
        par1NBTTagCompound.setShort("BurnTime", (short)this.BurnTime);
        par1NBTTagCompound.setShort("WaterLVL", (short)this.waterLvl);
        par1NBTTagCompound.setShort("CurrBurn", (short)this.currentBurnTime);
        //par1NBTTagCompound.setShort("CombDurTime", (short)this.combmachineCombDCurTime);
        NBTTagList nbttaglist = new NBTTagList();

        for (int i = 0; i < this.coalheatereItemStacks.length; ++i)
        {
            if (this.coalheatereItemStacks[i] != null)
            {
                NBTTagCompound nbttagcompound1 = new NBTTagCompound();
                nbttagcompound1.setByte("Slot", (byte)i);
                this.coalheatereItemStacks[i].writeToNBT(nbttagcompound1);
                nbttaglist.appendTag(nbttagcompound1);
            }
        }

        par1NBTTagCompound.setTag("Items", nbttaglist);

        if (this.isInvNameLocalized())
        {
            par1NBTTagCompound.setString("Coal Heater", this.field_94130_e);
        }
    }

    public int getInventoryStackLimit()
    {
        return 64;
    }

    /*
    @SideOnly(Side.CLIENT)
    public int getCombDurProgressScaled(int par1)
    {
    	return this.combmachineCombDCurTime * par1 / 200;
    }
    */

    @SideOnly(Side.CLIENT)
    public int getHeatTimeRemainingScaled(int par1)
    {
        if (this.currentBurnTime == 0)
        {
            this.currentBurnTime = 200;
        }

        return this.BurnTime * par1 / this.currentBurnTime;
    }
    
    @SideOnly(Side.CLIENT)
    public int getWaterLVLScaled(int par1)
    {
    	return this.waterLvl * par1 / 10000;
    }
    
    public boolean hasWater()
    {
    	return this.waterLvl > 0;
    }
    
    public boolean isHeating()
    {
        return this.BurnTime > 0;
    }
    

    /** Als hij "fuel" en een recipe heeft */
    public void updateEntity()
    {
    	boolean flag = this.BurnTime > 0;
        boolean flag1 = false;
        
        
        if (this.BurnTime > 0)
        {
            --this.BurnTime;
        }
        
        if (!this.hasWater())
        {
        	this.BurnTime = 0;
        }
        
        if (this.isHeating() && this.hasWater())
        {
        	if (TileSteam.SteamCount < TileSteam.getMaxSteamCount())
        	{
        		TileSteam.SteamCount = TileSteam.SteamCount + 17;
        		this.waterLvl = waterLvl - 1;
        	}
            
        }
        
        

        if (!this.worldObj.isRemote)
        {
        	if (this.waterLvl <= 9000)
            {
            	this.loseWater();
            }
            if (this.BurnTime == 0)
            {
            	if(this.hasWater() && TileSteam.SteamCount < TileSteam.getMaxSteamCount())
            	{
            		this.currentBurnTime = this.BurnTime = getBurnHeaterTime(this.coalheatereItemStacks[ints.BURNSLOT]);
                    
            		if (this.BurnTime > 0)
            		{
            			flag1 = true;

            			if (this.coalheatereItemStacks[ints.BURNSLOT] != null)
            			{
            				--this.coalheatereItemStacks[ints.BURNSLOT].stackSize;

            				if (this.coalheatereItemStacks[ints.BURNSLOT].stackSize == 0)
            				{
            					this.coalheatereItemStacks[ints.BURNSLOT] = this.coalheatereItemStacks[ints.BURNSLOT].getItem().getContainerItemStack(coalheatereItemStacks[ints.BURNSLOT]);
            				}
            			}
            		}              
            	}
            }
            if (flag != this.BurnTime > 0 && hasWater())
            {
                flag1 = true;                
            }
            else
            {
            	flag1 = false;
            }
            
            if(flag1)
            {
            	//this.onInventoryChanged();
            	CoalHeater.updateCombMachineBlockState(this.BurnTime > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord);
            }
            else
            {
            	CoalHeater.updateCombMachineBlockState(this.BurnTime > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord);
            }
        }

        if (flag1)
        {
            //this.onInventoryChanged();
        }
    }
    
    private boolean canTakeWater()
    {
    	if (this.coalheatereItemStacks[ints.WATERSLOT] == null)
        {
            return false;
        }
    	else
    	{
    		ItemStack itemstack = CoalHearterRecipes.smelting().getWaterBucket(this.coalheatereItemStacks[ints.WATERSLOT]);
            if (itemstack == null) return false;
            int result = coalheatereItemStacks[ints.WATERSLOT].stackSize + itemstack.stackSize;
            return (result <= getInventoryStackLimit() && result <= itemstack.getMaxStackSize());
    	}
    }

    /** Hier pakt hij de recipe en of hij aan mag of niet. */
    /*
    private boolean canHeat()
    {
        if (this.coalheatereItemStacks[ints.BURNSLOT] == null)
        {
            return false;
        }
        else
        {
        	ItemStack itemstack = CoalHearterRecipes.smelting().getCombiningResultOneSlot(this.coalheatereItemStacks[ints.BURNSLOT]);
            if (itemstack == null) return false;
            if (this.coalheatereItemStacks[ints.OUTPUT] == null) return true;
            if (!this.coalheatereItemStacks[ints.OUTPUT].isItemEqual(itemstack)) return false;
            int result = coalheatereItemStacks[ints.OUTPUT].stackSize + itemstack.stackSize;
            return (result <= getInventoryStackLimit() && result <= itemstack.getMaxStackSize());
        }
    }
    */

    /** Hier gebruikt hij de recipe en maakt er een output van. */
    public void loseWater()
    {
    	if (this.canTakeWater())
        {
            ItemStack itemstack = CoalHearterRecipes.smelting().getWaterBucket(this.coalheatereItemStacks[ints.WATERSLOT]);
            
            this.waterLvl = this.waterLvl + getWater(this.coalheatereItemStacks[ints.WATERSLOT]);
            // Output
            if (this.coalheatereItemStacks[ints.BUCKETOUT] == null)
            {
                this.coalheatereItemStacks[ints.BUCKETOUT] = itemstack.copy();
            }
            else if (this.coalheatereItemStacks[ints.BUCKETOUT].isItemEqual(itemstack))
            {
            	coalheatereItemStacks[ints.BUCKETOUT].stackSize += itemstack.stackSize;
            }
            // Input
            --this.coalheatereItemStacks[ints.WATERSLOT].stackSize;
            
            ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Test mode:" + this.waterLvl);
            

            if (this.coalheatereItemStacks[ints.WATERSLOT].stackSize <= 0)
            {
           	 	this.coalheatereItemStacks[ints.WATERSLOT] = null;
            }
            
        }
    }

    public static int getBurnHeaterTime(ItemStack par0ItemStack)
    {
        if (par0ItemStack == null)
        {
            return 0;
        }
        else
        {
            int i = par0ItemStack.getItem().itemID;
            Item item = par0ItemStack.getItem();

            if (par0ItemStack.getItem() instanceof ItemBlock && Block.blocksList[i] != null)
            {
                Block block = Block.blocksList[i];

                if (block == Block.woodSingleSlab)
                {
                    return 150;
                }

                if (block.blockMaterial == Material.wood)
                {
                    return 300;
                }

                if (block == Block.field_111034_cE)
                {
                    return 16000;
                }
            }

            if (i == InitItemTools.WoodScrap.itemID) return 800;
            if (i == InitItemTools.CompWoodScrap.itemID) return 1600;
            if (i == InitItemTools.CompCoalScrap.itemID) return 2400;
           // if (i == Item.coal.itemID) return 1600;
            return GameRegistry.getFuelValue(par0ItemStack);
        }
    }
    
    public static int getWater(ItemStack waterstack)
    {
    	if (waterstack == null)
        {
            return 0;
        }
    	else
    	{
    		int i = waterstack.getItem().itemID;
    		if (i == Item.bucketWater.itemID) return 1000;

    		return GameRegistry.getFuelValue(waterstack);
    	}
    }


    public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer)
    {
        return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D;
    }

    public void openChest() {}

    public void closeChest() {}
    
    public static boolean isItemFuel(ItemStack par0ItemStack)
    {
        return getBurnHeaterTime(par0ItemStack) > 0;
    }
    
    public static boolean isWaterBucket(ItemStack par0ItemStack)
    {
    	return getWater(par0ItemStack) > 0;
    }
    
    public boolean isItemValidForSlot(int par1, ItemStack par2ItemStack)
    {
        return par1 == 2 ? false : (par1 == 1 ? isItemFuel(par2ItemStack) : true);
    }
    
    public boolean isItemValidForBucket(int par1, ItemStack par2ItemStack)
    {
        return par1 == 2 ? false : (par1 == 1 ? isWaterBucket(par2ItemStack) : true);
    }
    
    public int[] getAccessibleSlotsFromSide(int par1)
    {
        return par1 == 0 ? slots_bottom : (par1 == 1 ? slots_top : slots_sides);
    }

    public boolean canInsertItem(int par1, ItemStack par2ItemStack, int par3)
    {
        return this.isItemValidForSlot(par1, par2ItemStack);
    }

    public boolean canExtractItem(int par1, ItemStack par2ItemStack, int par3)
    {
        return par3 != 0 || par1 != 1 || par2ItemStack.itemID == Item.bucketEmpty.itemID;
    }
}

 

Link to comment
Share on other sites

i know its static ... id i turn into a normal int they waterlvl jsut spikes and dusnt add it correct then i add a waterbucket ...

 

and also the gui cant work than .. of the scaled.... stuff

 

i may try it again but i know it dint work before

 

and also when its not static it wont remember my water lvl when i re open gui after (first active)  and it wont be stored when i restart mc ... or re open my map'

 

so yea when its static it does remember my lvl ...

 

realy weird stuff is going on with the int waterlvl when its not  static oh and when i add new bucket tot the non static int it uses the in 2 seperated times ..

so mc returns it as 2  seperated ints while its 1 int ... realy weird

Link to comment
Share on other sites

packet, those thing you send (pew pew pew) to the server. and the server goes "oh hey i got a message *read message* do stuff yeah mhmmmm"

 

then the server send more message to the client (pew pew pew)

 

and the client goes " oh thats great now i can show to the player what the game looks like"

 

 

yeah packet are message between server and client

how to debug 101:http://www.minecraftforge.net/wiki/Debug_101

-hydroflame, author of the forge revolution-

Link to comment
Share on other sites

packet, those thing you send (pew pew pew) to the server. and the server goes "oh hey i got a message *read message* do stuff yeah mhmmmm"

 

then the server send more message to the client (pew pew pew)

 

and the client goes " oh thats great now i can show to the player what the game looks like"

 

 

yeah packet are message between server and client

 

 

wtf lol XDXD can you been anny more unclear :(???

 

i dont even have 1 clew now hot to make my waterlvl work again in my gui iv been stuck for 5 hours now staring at the code that did work before ..

but isnt now :( and i dont know why it sould work but it dusnt :( ...

 

it dustn even begin to draw it now .. nothing happens ..

 

greets

Link to comment
Share on other sites

packet are message between 2 program via internet, server send packet to client about the information for the position and rotation of mobs, as well as their health. it also sends packet containing the chunk information. client send packet containing which key are pressed and which buttons are clicked, gotolink tells you to send pacekt to the server to tell him that this client has pressed a specific button

 

 

how to debug 101:http://www.minecraftforge.net/wiki/Debug_101

-hydroflame, author of the forge revolution-

Link to comment
Share on other sites

how does that help my problem :S ...

 

 

this pice of dode:

b1 = this.coalheaterInventory.getWaterLVLScaled(49);
        this.drawTexturedModalRect(k + 156, l + 63 - b1, 176, 76 - b1, 76, b1 + 2);

 

worked before when the waterLvl was static .. and the modalrect was drawing back then ..

but back then all the block i place shared the same waterlvl .. so iv changed it ..

they dont share the waterlvl anny more but my gui

 

isnt drawing my modalrect anny more :S and i dont know why .. it did before but isnt now :S

 

greets

Link to comment
Share on other sites

You have to make a packet that sends the data from the server to the client telling the client what the water level is. Surely that is not complicated?!? I mean... I am a beginner and I get this stuff :/ ( I don't mean to brag, and I would explain, but I couldn't explain anything to save my life xD ... well, nevermind that statement. That was a paradox... Just don't mind these brackets k? )

I am Mew. The Legendary Psychic. I behave oddly and am always playing practical jokes.

 

I have also found that I really love making extremely long and extremely but sometimes not so descriptive variables. Sort of like what I just did there xD

Link to comment
Share on other sites

Gimme a sec... *pulls up list of tutorials that get frequently referenced*

 

Ah, here we go!

 

http://www.minecraftforge.net/wiki/Advanced_Packet_Handling

I am Mew. The Legendary Psychic. I behave oddly and am always playing practical jokes.

 

I have also found that I really love making extremely long and extremely but sometimes not so descriptive variables. Sort of like what I just did there xD

Link to comment
Share on other sites

Gimme a sec... *pulls up list of tutorials that get frequently referenced*

 

Ah, here we go!

 

http://www.minecraftforge.net/wiki/Advanced_Packet_Handling

 

iv looked at that .. and its incomplete ...

 

he uses a file:

import com.example.demomod.network.DemoPacket.ProtocolException;

 

in his demopackethandler .. and that file isnt in the tutorial lol so i cant make it work with out knowing whats in that file ... ProtocolExeption.class

 

and also

 

it uses strings ??

// Send to server

PacketDispatcher.sendPacketToServer(new TestPacket("Hello World!").makePacket());

 

// send to player

PacketDispatcher.sendPacketToPlayer(new TestPacket("Hello World!").makePacket(), (Player)player);

 

and if you can use ints to sent insteat of the string .. how am i able to use that to send at my what ? tile entity ? send at my mod.class? send it where ..

 

he dusnt realy claryfy where you can send it from .. (my gues would be it can be send from every were ..)

ánd how can my gui recive it ?? i see only a send option  and the only receive option is in the packed handler ...

Link to comment
Share on other sites

I used it. It worked for me. I got the concept behind it :/

 

Sorry, but no explaining tonight xD I need to sleep my brain back into working order :/

I am Mew. The Legendary Psychic. I behave oddly and am always playing practical jokes.

 

I have also found that I really love making extremely long and extremely but sometimes not so descriptive variables. Sort of like what I just did there xD

Link to comment
Share on other sites

I used it. It worked for me. I got the concept behind it :/

 

Sorry, but no explaining tonight xD I need to sleep my brain back into working order :/

 

NVM found out what was my problem xD haha lol

anny way let see how i can us this to so the waterlvl for my gui .. becose the tutorial uses strings :o

Link to comment
Share on other sites

hey me again ..

 

 

// Send to server

//PacketDispatcher.sendPacketToServer(new Waterpacket("Hello World!").makePacket());

 

// send to player

//PacketDispatcher.sendPacketToPlayer(new Waterpacket("Hello World!").makePacket(), (Player)player);

 

how can i use that packet tutorial with these line to solve my problem at my gui ??

do i need to send my int waterlvl ? how do i do this ??

Link to comment
Share on other sites

nice of you for not helping me .......................

 

i told you the gui did work before wiht out anny packages ... and the burntime (sint shared and not doing that in a packet)

 

... and that still works on every gui ..

 

my question is simple but ppl keep telling me the same thing do packets .. for it but i have no idea on how to use a packet for int but noe one is helping me at all or is beeing verry cryptic about it.

 

and now you tell me go learn more java and come back...

 

WHY did the gui work before when the waterLvl was static and dusnt now ..

and WHY dit it work with out packets .. (like the burning time) and dusnt now (while the burning time still works)

 

thats what im asking ...

 

greets

Link to comment
Share on other sites

I shall jump in and help good sir! But really, it is a matter of java knowledge I am sorry to say...

 

But here is what you will want:

package com.example.demomod.network;

import net.minecraft.entity.player.EntityPlayer;

import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteArrayDataOutput;

import cpw.mods.fml.relauncher.Side;

public class TestPacket extends DemoPacket {

        private int randomInteger;
        
        public TestPacket(String randomInteger) {
                this.randomInteger = randomInteger;
        }

        public TestPacket() { } // Be sure to always have the default constructor in your class, or the reflection code will fail!

        @Override
        protected void write(ByteArrayDataOutput out) {
                out.writeInteger(randomInt);
        }

        @Override
        protected void read(ByteArrayDataInput in) throws ProtocolException {
                randomInt = in.readInteger();
        }

        @Override
        protected void execute(EntityPlayer player, Side side) throws ProtocolException {
                if (side.isClient()) {
                        // Crap... Umm, aside from that, I can't remember what I am doing. You basically have to make it so that the GUI gets the integer... I really can't remember... I know I have done it before, but I would have to double check code. I believe that I remember thinking it redundant.... So don't think it's redundant. I will be back with some working stuff 
                } else {
                        throw new ProtocolException("Cannot send this packet to the server!");
                }
        }
}

 

 

[** EDIT **]

 

Well, here is the packet: https://github.com/ModderPenguin/MinePG/blob/master/source/minepg/rpg_common/rpg/network/packet/PacketPlayerInfo.java

 

And here is where it gets sent: https://github.com/ModderPenguin/MinePG/blob/master/source/minepg/rpg_common/rpg/comm/ConnectionHandler.java ( Note that it is near the bottom of the class )

 

So basically, it was setting the data back to itself. Like I said, seems redundant. But it's not. It is basically telling the client what the new data is. Also, on the closing of the GUI, you would want to send the packet again ( but to the server ) etc. Basically every time you want to update the data between the two, send the packet. And yes, my packets are slightly different... Feel free to use my setup as examples. I quite like my packet setup actually, even though it was diesieben07 who I got it from. Thank him for it next time you see him xD

I am Mew. The Legendary Psychic. I behave oddly and am always playing practical jokes.

 

I have also found that I really love making extremely long and extremely but sometimes not so descriptive variables. Sort of like what I just did there xD

Link to comment
Share on other sites

i actuly got tht far in the textpacket it needed ints .. iv done that my selve alredy ..

 

but now what ? i have the packet done .. at what class do i send my int ? en how can i use it in my gui ? so fix my waterlvl again (witch did work before with out packets)

 

??

 

oht btw ...

i1 = this.coalheaterInventory.getWaterLVLScaled(49);

        this.drawTexturedModalRect(k + 156, l + 14 - i1, 176, 27 - i1, 10, i1 + 27);

 

does draw my water lvl texture in my gui now (with out packets) ..

but its not scaling or moding ... its not using the i1 value at all ...

 

and this is the burntime (witch does scale and work)

 

i1 = this.coalheaterInventory.getHeatTimeRemainingScaled(12);

            this.drawTexturedModalRect(k + 78, l + 54 + 12 - i1, 176, 12 - i1, 14, i1 + 2);

 

so my question is now why doesnt the getwaterlvlscaled not work anny more (it did before)

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

    • I'm developing a dimension, but it's kinda resource intensive so some times during player teleporting it lags behind making the player phase down into the void, so im trying to implement some kind of pregeneration to force the game loading a small set of chunks in the are the player will teleport to. Some of the things i've tried like using ServerLevel and ServerChunkCache methods like getChunk() dont actually trigger chunk generation if the chunk isn't already on persistent storage (already generated) or placing tickets, but that doesn't work either. Ideally i should be able to check when the task has ended too. I've peeked around some pregen engines, but they're too complex for my current understanding of the system of which I have just a basic understanding (how ServerLevel ,ServerChunkCache  and ChunkMap work) of. Any tips or other classes I should be looking into to understand how to do this correctly?
    • https://mclo.gs/4UC49Ao
    • Way back in the Forge 1.17 days, work started for adding JPMS (Java Platform Module Support) to ModLauncher and ForgeModLoader. This has been used internally by Forge and some libraries for a while now, but mods (those with mods.toml specifically) have not been able to take advantage of it. As of Forge 1.21.1 and 1.21.3, this is now possible!   What is JPMS and what does it mean for modders? JPMS is the Java Platform Module System, introduced in Java 9. It allows you to define modules, which are collections of packages and resources that can be exported or hidden from other modules. This allows for much more fine-tuned control over visibility, cleaner syntax for service declarations and support for sealed types across packages. For example, you might have a mod with a module called `com.example.mod` that exports `com.example.mod.api` and `com.example.mod.impl` to other mods, but hides `com.example.mod.internal` from them. This would allow you to have a clean API for other mods to use, while keeping your internal implementation details hidden from IDE hints, helping prevent accidental usage of internals that might break without prior notice. This is particularly useful if you'd like to use public records with module-private constructors or partially module-private record components, as you can create a sealed interface that only your record implements, having the interface be exported and the record hidden. It's also nice for declaring and using services, as you'll get compile-time errors from the Java compiler for typos and the like, rather than deferring to runtime errors. In more advanced cases, you can also have public methods that are only accessible to specific other modules -- handy if you want internal interactions between multiple of your own mods.   How do I bypass it? We understand there may be drama in implementing a system that prevents mods from accessing each other's internals when necessary (like when a mod is abandoned or you need to fix a compat issue) -- after all, we are already modding a game that doesn't have explicit support for Java mods yet. We have already thought of this and are offering APIs from day one to selectively bypass module restrictions. Let me be clear: Forge mods are not required to use JPMS. If you don't want to use it, you don't have to. The default behaviour is to have fully open, fully exported automatic modules. In Java, you can use the `Add-Opens` and `Add-Exports` manifest attributes to selectively bypass module restrictions of other mods at launch time, and we've added explicit support for these when loading your Forge mods. At compile-time, you can use existing solutions such as the extra-java-module-info Gradle plugin to deal with non-modular dependencies and add extra opens and exports to other modules. Here's an example on how to make the internal package `com.example.examplemod.internal` open to your mod in your build.gradle: tasks.named('jar', Jar) { manifest { attributes([ 'Add-Opens' : 'com.example.examplemod/com.example.examplemod.internal' 'Specification-Title' : mod_id, 'Specification-Vendor' : mod_authors // (...) ]) } } With the above in your mod's jar manifest, you can now reflectively access the classes inside that internal package. Multiple entries are separated with a space, as per Java's official spec. You can also use Add-Exports to directly call without reflection, however you'd need to use the Gradle plugin mentioned earlier to be able to compile. The syntax for Add-Exports is the same as Add-Opens, and instructions for the compile-time step with the Gradle plugin are detailed later in this post. Remember to prefer the opens and exports keywords inside module-info.java for sources you control. The Add-Opens/Add-Exports attributes are only intended for forcing open other mods.   What else is new with module support? Previously, the runtime module name was always forced to the first mod ID in your `mods.toml` file and all packages were forced fully open and exported. Module names are now distinguished from mod IDs, meaning the module name in your module-info.java can be different from the mod ID in your `mods.toml`. This allows you to have a more descriptive module name that doesn't have to be the same as your mod ID, however we strongly recommend including your mod ID as part of your module name to aid troubleshooting. The `Automatic-Module-Name` manifest attribute is now also honoured, allowing you to specify a module name for your mod without needing to create a `module-info.java` file. This is particularly useful for mods that don't care about JPMS features but want to have a more descriptive module name and easier integration with other mods that do use JPMS.   How do I use it? The first step is to create a `module-info.java` file in your mod's source directory. This file should be in the same package as your main mod class, and should look something like this: open module com.example.examplemod { requires net.minecraftforge.eventbus; requires net.minecraftforge.fmlcore; requires net.minecraftforge.forge; requires net.minecraftforge.javafmlmod; requires net.minecraftforge.mergetool.api; requires org.slf4j; requires logging; } For now, we're leaving the whole module open to reflection, which is a good starting point. When we know we want to close something off, we can remove the open modifier from the module and open or export individual packages instead. Remember that you need to be open to Forge (module name net.minecraftforge.forge), otherwise it can't call your mod's constructor. Next is fixing modules in Gradle. While Forge and Java support modules properly, Gradle does not put automatic modules on the module path by default, meaning that the logging module (from com.mojang:logging) is not found. To fix this, add the Gradle plugin and add a compile-time module definition for that Mojang library: plugins { // (...) id 'org.gradlex.extra-java-module-info' version "1.9" } // (...) extraJavaModuleInfo { failOnMissingModuleInfo = false automaticModule("com.mojang:logging", "logging") } The automatic module override specified in your build.gradle should match the runtime one to avoid errors. You can do the same for any library or mod dependency that is missing either a module-info or explicit Automatic-Module-Name, however be aware that you may need to update your mod once said library adds one. That's all you need to get started with module support in your mods. You can learn more about modules and how to use them at dev.java.
    • Faire la mise à jour grâce à ce lien m'a aider personnellement, merci à @Paint_Ninja. https://www.amd.com/en/support 
    • When I came across the 'Exit Code: I got a 1 error in my Minecraft mods, so I decided to figure out what was wrong. First, I took a look at the logs. In the mods folder (usually where you'd find logs or crash reports), I found the latest.log file or the corresponding crash report. I read it through carefully, looking for any lines with errors or warnings. Then I checked the Minecraft Forge support site, where you can often find info on what causes errors and how to fix them. I then disabled half of my mods and tried running the game. If the error disappeared, it meant that the problem was with the disabled mod. I repeated this several times to find the problem mod.
  • Topics

×
×
  • Create New...

Important Information

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