Jump to content

[1.7.10][semi-solved] Constructing a list of subItems on the server


Recommended Posts

Posted

Hello everyone, I am having yet another problem with packets, but since this problem isn't like my previous ones i decided to make a new topic.

 

In my mod, the first time any client joins a new server, I need to send quite a lot of data from the server to that client and from that client back to the server.

If you want to know why I am doing this you can read the old topic here:

http://www.minecraftforge.net/forum/index.php/topic,32902.0.html

 

The thing diesieben07 had warned me for in the previous topic has happened, the payload of the packet I am sending to the server is too high.

To resolve this issue I want to pre-calculate the payload of my packet, and if it is too high i will send an early packet and start constructing a new one (if that makes any sense, but i feel like i'm failing at explaining what i mean here)

 

I am currently using the following code to calculate the payload:

public int getPayload(List<ItemStack> itemStacks){
	int payload = 1;

	if(itemStacks.size() <= Byte.MAX_VALUE){
		payload += 1;
	}else if(itemStacks.size() <= Short.MAX_VALUE){
		payload += 2;
	}else{
		payload += 4;
	}

	payload += itemStacks.size() * 5;

	for(int i = 0; i < itemStacks.size(); i++){
		if (itemStacks.get(i).getItem().isDamageable() || itemStacks.get(i).getItem().getShareTag()){
			payload += 3;
                NBTTagCompound compound = itemStacks.get(i).stackTagCompound;
                if(compound != null){
                	payload += compound.func_150296_c().size() * 6;
                }
            }
	}

	return payload;
}

 

from what i've seen i figure that the payload of a packet is equal to the amount of bytes in the byteBuffer.

keeping this in mind i calculated the values to use in the calculations, but if i am wrong somewhere please correct me, I am not very familiar with packets and bytebuffers.

 

In my packet I am first sending a byte, this is why i start with payload = 1.

Then, depending on the size of the value, i am sending a byte, a short or an integer. This is what the if statement is for.

After that is done i am sending an array of itemStacks, i found that two shorts and a byte are used to write an itemStack, and this is why i am using *5.

 

For some itemStacks NBTTagCompounds are written, the if statement i am using in the for-loop is the same one vanilla uses to determine if the compound should be written or not.

However, i feel like my calculations for the payload size of a compound are not right. I wrote that code yesterday before i went to bed, and i really don't know anymore where i got the +3 and the *6 from...

 

I am using 23767 as the max payload value, i found this value in the C17PacketCustomPayload class, but if this is wrong be sure to correct me  ;)

 

I assume my calculations are right up until the point of the NBTTagCompound, so my question is if someone knows how i can properly calculate the payload of an NBTTagCompound, or if there is a better way to go about splitting up my packets.

I made the Mob Particles mod, you can check it out here: http://www.minecraftforum.net/topic/2709242-172-forge-mob-particles/

Posted

Sorry but I read your other thread this can be done with more simple payloads. The server already knows all the items, and yes you're right that it is easier to pick sub-type on the client. But you can still get a list on the server by going through the item list once and querying a client to get info on the subtypes.

 

The only code you should have following logic:

1) server goes through the item registry and sends packet to client indicating which item (the payload can simply be the integer ID from the registry)

3) client checks whether the item has subtypes and if it does it does the getSubItems() and finds the size of sub-type list.

4) client sends packet to server indicating the number of subtypes.

5) server updates a mapping of items and number of subtypes.

 

So two very small packets are required.

 

Now if you really want to continue in the way you were, I'm surprised that the packet is large. You only need to have the client send a list of item ids that have subtypes and how many there are. Server can assume that remaining items don't have subtypes. So it should only be several dozen bytes long I think -- for example all 16 dyes would just be represented by three bytes (two for id and one for number of subtypes).

 

In either case you get the best situation -- server gets complete list and therefore prevents hacking and can control the probability of selection to ensure all items have equal chance (or some other distribution if you want).

 

By the way, to answer your specific question about large payloads: for the logic in creating large payloads, the protocols are usually simple -- in the first bytes of the payload you simply send a boolean to indicate whether this packet is the last packet or not. If not, the receiver will continue to concatenate incoming packets. You don't need to send anything about the actual size, just whether you're finished or more is coming.

 

 

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

Posted
  On 8/13/2015 at 4:03 PM, jabelar said:

The only code you should have following logic:

1) server goes through the item registry and sends packet to client indicating which item (the payload can simply be the integer ID from the registry)

3) client checks whether the item has subtypes and if it does it does the getSubItems() and finds the size of sub-type list.

4) client sends packet to server indicating the number of subtypes.

5) server updates a mapping of items and number of subtypes.

 

You're system would indeed be way more efficient, but it doesn't fully cover my needs. There are however some key-components which i might be able to integrate into my system to make it more efficient.

 

The biggest problem is a check that i am using which can only be done on the clientSide, i check if getCreativeTab() != null to exclude placeholder blocks/items (such as water_still, commandBlocks, monster spawners, etc...) from the list, since these are usually not obtainable anyway. But the getCreativeTab() method is clientSide only, and this makes it so that i am currently sending almost every item in the game to the client which of course is a bad thing.

 

I am currently using Itemregistry.getNameForObject(item) to identify the items and i am sending these Strings to the client. the payload of an integer is way less, so it would probably be better to send the ID's instead of the names. Only one question would come to mind, are the ID's constant on the server and on the client? for vanilla minecraft this is probably the case, but what if other mods add items, would those id's be the same on the client and on the server? and what if the client has more mods installed than the server has, the client would still be able to join, but would the id's be the same?

 

  Quote

Now if you really want to continue in the way you were, I'm surprised that the packet is large. You only need to have the client send a list of item ids that have subtypes and how many there are. Server can assume that remaining items don't have subtypes. So it should only be several dozen bytes long I think -- for example all 16 dyes would just be represented by three bytes (two for id and one for number of subtypes).

 

This would be, if i would implement such a system, which would probably be better to be honest. However the system that i am using at the moment sends the itemStacks of the subitems to the server, for vanilla only this works fine, however if i start adding other mods, the list of items becomes longer and as a result the payload of the packet becomes larger.

 

  Quote

By the way, to answer your specific question about large payloads: for the logic in creating large payloads, the protocols are usually simple -- in the first bytes of the payload you simply send a boolean to indicate whether this packet is the last packet or not. If not, the receiver will continue to concatenate incoming packets. You don't need to send anything about the actual size, just whether you're finished or more is coming.

 

The problem currently is not so much how many packets i need to send, but more how many itemStacks i can write to a single packet. Since it's better to send one big packet than multiple smaller packets i am currently trying to fit as many itemStacks as i can into every packet i send. so my question is how i can calculate the payload (specifically of an NBTTagCompound) so i can send the packet away if the payload get's too large, and start writing the rest of the itemStacks to a new packet.

I made the Mob Particles mod, you can check it out here: http://www.minecraftforum.net/topic/2709242-172-forge-mob-particles/

Posted

I fixed it!

I have been looking at the write methods within the subclasses of NBTBase, and calculated the payload per type of NBT. I am iterating through the keys of the NBTTagCompound and adding the payload of every key together to calculate the payload of the full compound.

 

I was interested to see how many packets it would get split up into, and the payload of these packets. this is what i found:

 

http://pastebin.com/bavmL5ds

 

I was quite shocked by the result.

previously i was able to send all itemStacks in one packet (which is probably the first packet containing 841 items).

I have added a single mod, and now i need 27 packets (most of which only contain 19 items...)

I am almost certain now that I am going to rewrite this system sometime in the future, I don't want to think about the amount of packets needed for a small modpack...

 

It makes me wonder though, why would you ever need that much data in an itemStack........ :o

I made the Mob Particles mod, you can check it out here: http://www.minecraftforum.net/topic/2709242-172-forge-mob-particles/

Posted

I don't think you understand how easy it is to do what you want. All you need is the client to send information about those few items that have more than one type.

 

I wrote some code to do this, and this was the result (item id and number of subtypes):

{1=7, 322=2, 3=3, 5=6, 6=6, 263=2, 139=2, 12=2, 397=5, 17=4, 145=3, 18=4, 19=2, 24=3, 155=3, 349=4, 350=2, 31=2, 95=16, 159=16, 351=16, 160=16, 97=6, 161=2, 98=4, 162=2, 35=16, 38=9, 168=3, 425=16, 171=16, 44=7, 175=6, 179=3, 373=61, 126=6, 383=27}

 

You can double check the accuracy here: http://minecraft-ids.grahamedgecombe.com/

 

For example, it says iD#1 has 7 sub-types, which is correct (it is various types of stone block).

 

So you just need to pack that info into a packet and send it.

 

Here is my code. I run it in the client proxy since there are some client-only methods. Note you must do this in the post-init stage since you want to make sure all mods have registered their items as well.

 

 

  Reveal hidden contents

 

 

I just run each method during post-init. I have two map fields, one that holds all items and another that is "sparse" meaning only containing those items that have more than one sub-type.

 

Then if you send this info to the server in a packet, it would go create a list of ItemStack by through the list of items but also accounting for the number of sub-types the client said there were.

 

 

 

 

 

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

Posted
  On 8/13/2015 at 8:33 PM, jabelar said:

I don't think you understand how easy it is to do what you want. All you need is the client to send information about those few items that have more than one type.

 

I wrote some code to do this, and this was the result (item id and number of subtypes):

{1=7, 322=2, 3=3, 5=6, 6=6, 263=2, 139=2, 12=2, 397=5, 17=4, 145=3, 18=4, 19=2, 24=3, 155=3, 349=4, 350=2, 31=2, 95=16, 159=16, 351=16, 160=16, 97=6, 161=2, 98=4, 162=2, 35=16, 38=9, 168=3, 425=16, 171=16, 44=7, 175=6, 179=3, 373=61, 126=6, 383=27}

 

You can double check the accuracy here: http://minecraft-ids.grahamedgecombe.com/

 

For example, it says iD#1 has 7 sub-types, which is correct (it is various types of stone block).

 

So you just need to pack that info into a packet and send it.were.

 

The biggest problem i have with this, is more a question than a problem. as i said earlier, i have no doubt that the id's are the same on the client and on the sever when using only vanila, however, will the id's be the same if more mods are installed? and what happens if the client has more mods installed than the server?

 

second problem: the rest of my mod is fully based around having a list of itemStacks on the server, if i change this out to a map of id's to subItems, i basically have to rewrite my whole mod, which i don't feel like doing right now, this is why i said i will probably change the system later.

 

  Quote

Then if you send this info to the server in a packet, it would go create a list of ItemStack by through the list of items but also accounting for the number of sub-types the client said there were.

 

this is interesting, if there is a way to convert this map to a list of ItemStacks i could easily integrate it into the rest of the mod, and i would happily change my current system to this system.

I made the Mob Particles mod, you can check it out here: http://www.minecraftforum.net/topic/2709242-172-forge-mob-particles/

Posted

If the ID's on the client and server are different, you will have much bigger problems that your worry.

Long time Bukkit & Forge Programmer

Happy to try and help

Posted
  On 8/13/2015 at 9:07 PM, delpi said:

If the ID's on the client and server are different, you will have much bigger problems that your worry.

 

I am not entirely sure how the new ID system works, but since minecraft stopped using id's i have tried to avoid them...

but from your answer i assume it's safe to say ID's will be constant on the client and the server?

I made the Mob Particles mod, you can check it out here: http://www.minecraftforum.net/topic/2709242-172-forge-mob-particles/

Posted
  On 8/13/2015 at 9:23 PM, diesieben07 said:

Minecraft does use IDs, just like it did before. They are just dynamically assigned. Yes, they are consistent between client & server.

 

Thank you! might have to look into using ID's then, since the payload of an integer is way less than that of a String.

could probably even convert most of them to bytes/shorts for even more efficiency  :)

I made the Mob Particles mod, you can check it out here: http://www.minecraftforum.net/topic/2709242-172-forge-mob-particles/

Posted
  On 8/13/2015 at 9:01 PM, wesserboy said:

The biggest problem i have with this, is more a question than a problem. as i said earlier, i have no doubt that the id's are the same on the client and on the sever when using only vanila, however, will the id's be the same if more mods are installed? and what happens if the client has more mods installed than the server?

 

second problem: the rest of my mod is fully based around having a list of itemStacks on the server, if i change this out to a map of id's to subItems, i basically have to rewrite my whole mod, which i don't feel like doing right now, this is why i said i will probably change the system later.

 

is is interesting, if there is a way to convert this map to a list of ItemStacks i could easily integrate it into the rest of the mod, and i would happily change my current system to this system.

 

Like mentioned, the IDs must match as that is how the server communicates. If you don't trust that, I suppose you could use unlocalized name strings which should also provide a unique way to look up things.

 

Yes, the server can create an actual list of ItemStacks using this information from the client. Basically the server would receive the packet from the client and then it would go through the Item.itemRegistry and would create a list of ItemStacks that would have metadata=0 if there was no match in the packet payload, otherwise would use the value from the packet payload and create multiple ItemStacks (one for each metadata value).

 

So steps would be like this:

  1) have a field on server to contain the List of ItemStacks

  2) when receiving the client packet, the server should iterate or loop through the Item.itemRegistry and check if the item has an id that matches a key in the map sent in the packet. If yes, then use the map value, otherwise use 0.

  3) For the number you get in Step #2, you'd loop and create a new ItemStack that contains the item. Like if the packet said there were 2 values, then you'd create one stack with metadata 0 and one with metadata 1. You'd add each stack to the List from Step #1.

 

After that the server would permanently have a list of all items and subtypes that you could use to do what you want.

 

This was actually an interesting topic. It does indeed suck that the getSubTypes() method is only client-side. It does seem useful to have an easy way to access all items including subtypes. I think I'll write this up as a utility as it might be useful sometime.

 

 

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

Posted

One note to watch out for. The example I give has the client indicate the number of different subtypes there are. In almost every case, the metadata values all start at 0 and go up with no gaps. However, I realized that in vanilla items, that spawn eggs (id = 383) actually start at 50. So my code will correctly say there are 27 spawn eggs but you won't know what the starting metadata value is. For vanilla you could just handle that special case, but other mods could have any scheme they wanted.

 

So to be really safe you probably have to send more information. I see two options:

1) if you just want to use this for random item generation, then the server could use messages to get the mapping to actual metadata after it chooses the item. In other words, if server knew there was 27 spawn eggs and it chose spawn egg 14, then it could send a message to the client asking what the actual metadata value should be.

2) You could create the initial list with a bit of extra information. For example, you could have something in the payload that flags any item that doesn't have regular pattern of metadata. Like the payload data could be a boolean (for whether it is normal), the item id, and the number of subtypes, then if it isn't normal you would provide the additional info (like start at 50).

 

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

Posted
  On 8/13/2015 at 9:46 PM, jabelar said:

Yes, the server can create an actual list of ItemStacks using this information from the client. Basically the server would receive the packet from the client and then it would go through the Item.itemRegistry and would create a list of ItemStacks that would have metadata=0 if there was no match in the packet payload, otherwise would use the value from the packet payload and create multiple ItemStacks (one for each metadata value).

 

So steps would be like this:

  1) have a field on server to contain the List of ItemStacks

  2) when receiving the client packet, the server should iterate or loop through the Item.itemRegistry and check if the item has an id that matches a key in the map sent in the packet. If yes, then use the map value, otherwise use 0.

  3) For the number you get in Step #2, you'd loop and create a new ItemStack that contains the item. Like if the packet said there were 2 values, then you'd create one stack with metadata 0 and one with metadata 1. You'd add each stack to the List from Step #1.

 

After that the server would permanently have a list of all items and subtypes that you could use to do what you want.

 

This system is not able to check if the item has a creativeTab, and as a result placeholder blocks like water_still, lava_flowing and piston_head would end up in the list.

however, this is easily fixable by making another map of the id's to booleans (creativetab == null) and combine the data of the two lists to construct the final list on the server.

 

There is still another problem with this system: it assumes the itemDamage of the subItems will increase as the amount of subItems does. While this is the case most of the time, even in vanilla there are cases where this is not true, look for instance at the spawn_egg.

This could however be solved by sending the damageValues of the subItems (in response to a requester packet from the server or something).

but as you can see the amount of data transferring is already rising.

 

Then there is a final problem: This system will not work with subItems that have nbtData.

I don't think in vanilla there are any items that use this, but in other mods it is used sometimes.

 

Here are two examples of it in Tconstruct:

https://github.com/SlimeKnights/TinkersConstruct/blob/a7405a3d10318bb5c486ec75fb62897a8149d1a6/src/main/java/tconstruct/tools/items/CreativeModifier.java

https://github.com/SlimeKnights/TinkersConstruct/blob/a7405a3d10318bb5c486ec75fb62897a8149d1a6/src/main/java/tconstruct/items/tools/FryingPan.java

 

The server would have itemStacks without nbtData, and possibly even with damageValues that are not used in that item.

There is no way for the server to reconstruct the nbtData, so the ItemStack must be sent to the server. (or at least it's nbtData).

There is no way for the server to 'know' if a subItem has nbtData, and because of this you will have to send the itemStacks of all subItems.

 

Unless... You want to use hasTagCompound() on the client on the subItems, and make a list of ID's that have subItems with nbt, and also send this list to the server to take into account.

But at this point you are sending so much data to the server that you might as well just send the itemStacks to the server.

 

If there are any mistakes in my thought process, be sure to tell me about them ;)

I made the Mob Particles mod, you can check it out here: http://www.minecraftforum.net/topic/2709242-172-forge-mob-particles/

Posted
  On 8/13/2015 at 10:03 PM, jabelar said:

One note to watch out for. The example I give has the client indicate the number of different subtypes there are. In almost every case, the metadata values all start at 0 and go up with no gaps. However, I realized that in vanilla items, that spawn eggs (id = 383) actually start at 50. So my code will correctly say there are 27 spawn eggs but you won't know what the starting metadata value is. For vanilla you could just handle that special case, but other mods could have any scheme they wanted.

 

So to be really safe you probably have to send more information. I see two options:

1) if you just want to use this for random item generation, then the server could use messages to get the mapping to actual metadata after it chooses the item. In other words, if server knew there was 27 spawn eggs and it chose spawn egg 14, then it could send a message to the client asking what the actual metadata value should be.

2) You could create the initial list with a bit of extra information. For example, you could have something in the payload that flags any item that doesn't have regular pattern of metadata. Like the payload data could be a boolean (for whether it is normal), the item id, and the number of subtypes, then if it isn't normal you would provide the additional info (like start at 50).

 

When i wrote my previous post, i hadn't read this yet: you can scrape problem n. 2 off the list  :)

I made the Mob Particles mod, you can check it out here: http://www.minecraftforum.net/topic/2709242-172-forge-mob-particles/

Posted

The NBT shouldn't be a big issue, I don't think. The getSubItems() method will get a List of ItemStacks based on whatever the mod author wanted, but the result is the same -- a list of ItemStacks with Item and metadata value. My code above will still properly count the number of subtypes. Then when you tell the client you're interested in the 5th sub-type, you can just look that up by taking that element from the list.

 

Otherwise, you're on the right track -- I can tell you understand the basic idea: you just need client to give information to server about the number of subtypes, and the Item itself can be referenced by ID. The server doesn't actually need to know the metadata value, it just needs to know the sub-types' index in the List that is returned by the client-side getSubItems(). So you shouldn't need to send that much data.

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

Posted
  On 8/14/2015 at 1:02 AM, jabelar said:

The NBT shouldn't be a big issue, I don't think. The getSubItems() method will get a List of ItemStacks based on whatever the mod author wanted, but the result is the same -- a list of ItemStacks with Item and metadata value. My code above will still properly count the number of subtypes. Then when you tell the client you're interested in the 5th sub-type, you can just look that up by taking that element from the list.

 

Otherwise, you're on the right track -- I can tell you understand the basic idea: you just need client to give information to server about the number of subtypes, and the Item itself can be referenced by ID. The server doesn't actually need to know the metadata value, it just needs to know the sub-types' index in the List that is returned by the client-side getSubItems(). So you shouldn't need to send that much data.

 

ahh, i see what you're saying, this would totally work.

It is however not a system that constructs a list of itemStacks on the server, this is a system that gives the server all the information it needs to request any itemStack from the client.

But with this system, if you need the actual itemStack on the server you still need to send it from the client. (probably as a respond to a requester packet containing the ID and the subItem index)

 

however, if optimized correctly the respond packet would most of the time only contain two shorts/ a short and an int. (ID and dmgValue)

Unless the itemStack has nbt, I think there's no way to avoid a big packet in that case...

 

This would probably be a really fun project to write and try to optimize it as best as possible.

I will probably try to write it in a separate project, and when it's fully working and optimized integrate it in the mod.

I made the Mob Particles mod, you can check it out here: http://www.minecraftforum.net/topic/2709242-172-forge-mob-particles/

Posted
  On 8/14/2015 at 1:30 AM, wesserboy said:

 

ahh, i see what you're saying, this would totally work.

It is however not a system that constructs a list of itemStacks on the server, this is a system that gives the server all the information it needs to request any itemStack from the client.

But with this system, if you need the actual itemStack on the server you still need to send it from the client. (probably as a respond to a requester packet containing the ID and the subItem index)

 

however, if optimized correctly the respond packet would most of the time only contain two shorts/ a short and an int. (ID and dmgValue)

Unless the itemStack has nbt, I think there's no way to avoid a big packet in that case...

 

This would probably be a really fun project to write and try to optimize it as best as possible.

I will probably try to write it in a separate project, and when it's fully working and optimized integrate it in the mod.

 

I agree it is a fun project.

 

It got me interested when I confirmed your point that server doesn't really have full concept of the sub-types. But every Item sub-type can be represented ultimately by the metadata. It's just that the server doesn't know the full list of possible metadata values.

 

I think ultimately you could create an List of ItemStacks on the server if you wanted to, you just have to do the work of transferring the actual metadata values from client to server. You can do that in a number of ways, and I think you have some ideas on how to do that. It would take a bit of thought, but seems quite doable. Good luck!

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

Posted

I couldn't let the topic go and kept working on it. I think I have success -- I can create a list from a byte buffer (which could be payload of a packet from client) that contains one of every item variant.

 

Here is what the output of the resulting List toString() looks like:

 

  Reveal hidden contents

 

 

You can see for example that the spawn eggs (called monster placers) start at metadata value of 50 like they're supposed to, etc.

 

Here is the code I run to create the byte buffer (you need to run each method in a row on client side). You need to put this code in the client proxy because it calls the client-side only methods:

 

  Reveal hidden contents

 

 

And here is the code that can receive the byte buffer on the server side and create the list:

 

  Reveal hidden contents

 

 

Note that the code probably needs some exception handling in case the byte buffer doesn't come in in the expected format. The expected format is:

  1) int for item ID

  2) byte for number of subtypes

  3) if the subtypes is more than 1, then each of the metadata values as integers.

 

Since the third part can be variable, you need to use loops to create and retrieve the values based on the number of subtypes.

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

Posted
  On 8/14/2015 at 3:11 PM, wesserboy said:

Nice! this system only doesn't support nbtdata yet, right? I'll have some time later today and than i will start on my system :)

 

It does support NBT data. The getSubTypes() method returns an ItemStack of items with different metadata. That metadata might have been generated by NBT, but the result is the same and that is what I'm passing back and forth.

 

Remember that there is a difference between the NBT used to make variants and item NBT used for further player customization. This whole scheme is about giving player's fresh items, not copying specific items that are customized by the player. The server already has the default NBT. You just need to pass the metadata mapping and the server can re-create the same item stack.

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

Posted

For the normal use of getSubItems this is true, it should return itemStacks with different damageValues, but other mods use it differently.

If you have a look at this implementation for instance:

https://github.com/SlimeKnights/TinkersConstruct/blob/a7405a3d10318bb5c486ec75fb62897a8149d1a6/src/main/java/tconstruct/tools/items/CreativeModifier.java

 

The only difference between the itemStacks created in the for loop is the "TargetLock" tag in their nbt, and this would not get picked up by your current system.

 

You are however right that getSubItems is not intended for such an implementation, since it's description says that it should return a list of items with different damagevalues ;)

I made the Mob Particles mod, you can check it out here: http://www.minecraftforum.net/topic/2709242-172-forge-mob-particles/

Posted
  On 8/14/2015 at 3:43 PM, jabelar said:

It does support NBT data. The getSubTypes() method returns an ItemStack of items with different metadata. That metadata might have been generated by NBT, but the result is the same and that is what I'm passing back and forth.

 

I am currently working on my system, and i am writing a system that maps the amount of data needed to reconstruct the subItems on the server.

I ran into something to think about, and it made me think of what you said earlier (the quote): can an itemStack have default nbtdata?

and if so, can this nbtdata be requested on the server?

 

My system is not functional yet, if it produces actually useful results i will post the code.

 

Also, if you don't mind i will change the title to something that fits the current discussion better ;)

I made the Mob Particles mod, you can check it out here: http://www.minecraftforum.net/topic/2709242-172-forge-mob-particles/

Posted

The system is coming along quite nicely, I have figured out how i want to go about doing things, and it just produced the first useful results.

My system tries to find a pattern in the subItems, and maps this pattern to every id. this way i only have to send the pattern to the server to reconstruct the subItems.

 

This is the id system i am currently using (There are two front slashes since i copied it from the comments within my class :P)

//Using an id system to visualize the amount of data needed to reconstruct on the server
//id 0: no subItems
//id 1: dmg subItems, starting at 0, incrementing by 1 for every subItem
//id 2: dmg subitems, starting at another value, incrementing by 1 for every subItem
//id 3: dmg subitems, starting at 0, incrementing by another value for every subItem
//id 4: dmg subItems, starting at another value, incrementing with another value for every subItem, but with regular pattern
//id 5: dmg subItems, with irregular pattern
//id 6: nbt subItems...? (still need to figure this mapping out...)
//
//How to send this to the server?
//First send the id of the needed data
//
//id 0: Item id
//id 1: Item id, amount of subItems
//id 2: Item id, amount of subItems, start value
//id 3: Item id, amount of subItems, increment value
//id 4: Item id, amount of subItems, start value, increment value
//id 5: Item id, amount of subItems, dmg values
//id 6: not sure how to map this yet, as a result not sure how to send it yet 
//
//variable formats:
//data id --> byte
//item id --> short will probably do (don't think id's go higher than 32767)
//amount of subItems --> byte (if you have more than 127 subItems you're doing something wrong...)
//start value --> byte? haven't encountered a startValue higher than 127
//increment value --> byte
//dmg value --> not sure yet, maybe a scaling system with a header byte indicating the format

 

There were some interesting results there, every id has been mapped at least once, except 4 (and 6 obviously), which i thought was pretty interesting.

It generated the following mapping:

http://pastebin.com/uYCirVy8

(I generated this list in minecraft 1.7.10, this is why the 1.8 items are missing from the list)

 

The code i used to generate this can be found here:

https://gist.github.com/wesserboy/b05aa0129d3079083ac8

 

This is what i am planning on implementing next:

--> write a method that optimizes the amount of data needed by remapping some id's

--> make a system that transfers the data to the server

--> make a system that constructs a list of itemStacks on the server, based on the data received from the client

----- at this point it should be fully functional for vanilla minecraft -----

--> figure out how to map the nbtData as efficient as possible

 

Since I am not quite sure yet how to efficiently map the nbtData, any idea's are welcome :)

I made the Mob Particles mod, you can check it out here: http://www.minecraftforum.net/topic/2709242-172-forge-mob-particles/

Posted

Just use ByteBufUtils to write NBT and read NBT into your packet payload.

 

I've gone ahead and think I have a full working implementation now to make the list, put it into a ByteBuf suitable to be a packet payload and then take that payload and convert it back to a list of ItemStacks, including both metadata and NBT.

 

Here is my code for initializing a public field to contain an "ItemStack registry" and then creating and reading the ByteBuf packet payload. This must go in your client proxy since it calls some client side only methods:

 

  Reveal hidden contents

 

 

I put a lot of console statements to help trace the execution (this is really important in packet payloads because if you make any mismatch in the type or order of data in the payload it will screw up. The results show that it indeed creates a full list (I'm using 1.8 so you'll see multiple variants of stone and such) including a custom item ("sheep skin") that has NBT data. You can see that the final list finds the item with NBT and includes it in the list.

 

First here is the ItemStack list on the sending side:

 

 

  Reveal hidden contents

 

 

Here you can see it recognizes my item has NBT and what the contents of the NBT are:

 

  Reveal hidden contents

 

 

Here is the contents of the packet payload:

 

  Reveal hidden contents

 

 

Here you can see that the receiving side recognizes my item with NBT and gets the correct NBT content:

 

  Reveal hidden contents

 

 

And finally here is the reconstructed ItemStack list, which you can see perfectly matches the one that was sent:

 

  Reveal hidden contents

 

 

Overall you can see that the code is really quite simple. The main thing is to come up with a mapping into the payload that can be decoded in the far end. The format I used was:

a) the Item ID as an int

b) the Item metadata as an int

c) a boolean for whether or not there is NBT

d) the NBT if any

 

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

Posted

My system is functional for vanilla now :)

 

It doesn't handle nbt data yet, but this is the next thing i am going to work on.

 

This is the itemStack list it generated on the server:

http://pastebin.com/KZ78zkhE

 

the 2048 indicates the amount of bytes used to transfer the data to the server (I found this number using buf.array().length, which i am guessing is the amount of bytes... but 2048 almost seems too perfect ;))

 

I am using the same mapping system i posted earlier, i just wrote a system to increase efficiency after the first mapping, and to send it all to the server, if you're interested in any of those i will happily post them, but i think they're quite generic.

 

Now i will implement nbt support.

I did know about ByteBufUtils, but i want to look for patterns in the nbtData before i send it to make sure i send the least amount of data needed.

I made the Mob Particles mod, you can check it out here: http://www.minecraftforum.net/topic/2709242-172-forge-mob-particles/

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

    • Add crash-reports with sites like https://mclo.gs/   Remove the Create addons - maybe one or more of these are not compatible with Create 6: create_hypertube create_jetpack create_missiled
    • this is the latest.log file :   [15:34:29] [main/INFO]: ModLauncher running: args [--username, Este_17000, --version, forge-47.4.0, --gameDir, C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1), --assetsDir, C:\Users\esteb\curseforge\minecraft\Install\assets, --assetIndex, 5, --uuid, 146b16bc1d204d99876f65014406b450, --accessToken, ????????, --clientId, MTdiNGM1M2QtMjQzYS00ZDZjLTliOTctMjFiZDY4ZGVkZWQ3, --xuid, 2535454605082131, --userType, msa, --versionType, release, --width, 1024, --height, 768, --quickPlayPath, C:\Users\esteb\curseforge\minecraft\Install\quickPlay\java\1751031268199.json, --launchTarget, forgeclient, --fml.forgeVersion, 47.4.0, --fml.mcVersion, 1.20.1, --fml.forgeGroup, net.minecraftforge, --fml.mcpVersion, 20230612.114412] [15:34:29] [main/INFO]: ModLauncher 10.0.9+10.0.9+main.dcd20f30 starting: java version 17.0.15 by Microsoft; OS Windows 11 arch amd64 version 10.0 [15:34:30] [main/INFO]: Loading ImmediateWindowProvider fmlearlywindow [15:34:30] [main/INFO]: Trying GL version 4.6 [15:34:30] [main/INFO]: Requested GL version 4.6 got version 4.6 [15:34:31] [pool-2-thread-1/INFO]: GL info: Intel(R) UHD Graphics GL version 4.6.0 - Build 32.0.101.6737, Intel [15:34:31] [main/INFO]: Starting Essential Loader (stage2) version 1.6.5 (1425fa2d69fa2b31e49c42a2d84be645) [stable] [15:34:31] [main/INFO]: SpongePowered MIXIN Subsystem Version=0.8.5 Source=union:/C:/Users/esteb/curseforge/minecraft/Install/libraries/org/spongepowered/mixin/0.8.5/mixin-0.8.5.jar%23100!/ Service=ModLauncher Env=CLIENT [15:34:32] [main/WARN]: Found newer Essential version 1.3.8.3 [stable], skipping at user request [15:34:33] [main/INFO]: Found mod file [1.20.1] SecurityCraft v1.10.0.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file ad_astra-forge-1.20.1-1.15.20.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file adastraextra-forge-1.20.1-1.2.3.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file aether-1.20.1-1.5.2-neoforge.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file amendments-1.20-1.2.19.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file appleskin-forge-mc1.20.1-2.5.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file appliedenergistics2-forge-15.4.2.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file Aquaculture-1.20.1-2.5.5.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file aquaculturedelight-1.1.1-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file architectury-9.2.14-forge.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file balm-forge-1.20.1-7.3.30-all.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file beautify-2.0.2.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file BetterThirdPerson-Forge-1.20-1.9.0.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file BiomesOPlenty-forge-1.20.1-19.0.0.96.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file botarium-forge-1.20.1-2.3.4.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file BrandonsCore-1.20.1-3.2.1.302-universal.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file cfm-forge-1.20.1-7.0.0-pre36.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file chefs-delight-1.0.3-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file ChickenChunks-1.20.1-2.10.0.100-universal.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file CodeChickenLib-1.20.1-4.4.0.516-universal.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file Controlling-forge-1.20.1-12.0.2.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file create-1.20.1-6.0.6.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file create_hypertube-0.1.5-FORGE.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file create_jetpack-forge-4.4.2.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file create_missiled-1.0.0-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file CTM-1.20.1-1.1.10.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file Cucumber-1.20.1-7.0.13.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file Draconic-Evolution-1.20.1-3.1.2.604-universal.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file easy_gamma-1.0.0-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file elevatorid-1.20.1-lex-1.9.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file ExtremeReactors2-1.20.1-2.0.92.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file FarmersDelight-1.20.1-1.2.7.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file FluxNetworks-1.20.1-7.2.1.15.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file framework-forge-1.20.1-0.7.15.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file fusion-1.2.7b-forge-mc1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file geckolib-forge-1.20.1-4.7.1.2.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file GlitchCore-forge-1.20.1-0.0.1.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file gravestone-forge-1.20.1-1.0.24.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file green_screen_mod-2.5.0-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file guideme-20.1.7.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file HammerLib-1.20.1-20.1.50.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file immersive_aircraft-1.2.2+1.20.1-forge.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file ImmersiveEngineering-1.20.1-10.2.0-183.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file ironchest-1.20.1-14.4.4.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file IronJetpacks-1.20.1-7.0.8.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file Jade-1.20.1-Forge-11.13.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file jei-1.20.1-forge-15.20.0.112.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file journeymap-1.20.1-5.10.3-forge.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file JustEnoughProfessions-forge-1.20.1-3.0.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file JustEnoughResources-1.20.1-1.4.0.247.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file kotlinforforge-4.11.0-all.jar of type LIBRARY with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file lios_overhauled_villages-1.18.2-1.21.5-v0.0.7.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file man_of_many_planes-0.2.0+1.20.1-forge.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file markdown_manual-MC1.20.1-forge-1.2.5+c3f0b88.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file mcef-forge-2.1.6-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file mcjtylib-1.20-8.0.6.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file mcw-bridges-3.1.0-mc1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file mcw-doors-1.1.2-mc1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file mcw-fences-1.2.0-1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file mcw-furniture-3.3.0-mc1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file mcw-holidays-1.1.0-mc1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file mcw-lights-1.1.2-mc1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file mcw-paintings-1.0.5-1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file mcw-paths-1.1.0forge-mc1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file mcw-roofs-2.3.2-mc1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file mcw-trapdoors-1.1.4-mc1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file mcw-windows-2.3.0-mc1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file MOAdecor ART 1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file MOAdecor BATH 1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file MOAdecor COOKERY 1.20.2.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file MOAdecor ELECTRONICS 1.20.1.A.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file MOAdecor GARDEN 1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file MOAdecor HOLIDAYS 1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file MOAdecor LIGHTS 1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file MOAdecor SCIENCE 1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file MOAdecor TOYS 1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file moneymoneymoney-1.0.1-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file moonlight-1.20-2.14.1-forge.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file MoreAndMoreArmorFORGE1201UPDATE.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file moresswords-1.1.0-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file mowziesmobs-1.7.2.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file nethersdelight-1.20.1-4.0.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file oc2r-1.20.1-forge-2.1.3-all.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file oceansdelight-1.0.2-1.20.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file Patchouli-1.20.1-84.1-FORGE.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file quarry-1.20.1-1.6.5r.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file rechiseled-1.1.6-forge-mc1.20.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file reforgedplaymod-1.20.1-0.3.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file refurbished_furniture-forge-1.20.1-1.0.12.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file resourcefulconfig-forge-1.20.1-2.1.3.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file resourcefullib-forge-1.20.1-2.1.29.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file rftoolsbase-1.20-5.0.6.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file rftoolsbuilder-1.20-6.0.8.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file rftoolspower-1.20-6.0.2.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file Searchables-forge-1.20.1-1.0.3.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file simplemissiles-1.6.2-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file SimpleQuarry-1.20.1-20.1.6.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file sophisticatedbackpacks-1.20.1-3.23.18.1247.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file sophisticatedcore-1.20.1-1.2.66.997.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file Steam_Rails-1.6.7+forge-mc1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file StorageDrawers-1.20.1-12.9.14.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file supermartijn642configlib-1.1.8-forge-mc1.20.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file supermartijn642corelib-1.1.18-forge-mc1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file supplementaries-1.20-3.1.30.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file suppsquared-1.20-1.1.21.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file tacz-1.20.1-1.1.6.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file TerraBlender-forge-1.20.1-3.0.1.10.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file torchmaster-20.1.9.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file twilightforest-1.20.1-4.3.2508-universal.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file veggiesdelight-1.7.2.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file voicechat-forge-1.20.1-2.5.30.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file waystones-forge-1.20.1-14.1.13.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file webdisplays-2.0.2-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/INFO]: Found mod file ZeroCore2-1.20.1-2.1.47.jar of type MOD with provider {mods folder locator at C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1)\mods} [15:34:33] [main/WARN]: Mod file C:\Users\esteb\curseforge\minecraft\Install\libraries\net\minecraftforge\fmlcore\1.20.1-47.4.0\fmlcore-1.20.1-47.4.0.jar is missing mods.toml file [15:34:33] [main/WARN]: Mod file C:\Users\esteb\curseforge\minecraft\Install\libraries\net\minecraftforge\javafmllanguage\1.20.1-47.4.0\javafmllanguage-1.20.1-47.4.0.jar is missing mods.toml file [15:34:33] [main/WARN]: Mod file C:\Users\esteb\curseforge\minecraft\Install\libraries\net\minecraftforge\lowcodelanguage\1.20.1-47.4.0\lowcodelanguage-1.20.1-47.4.0.jar is missing mods.toml file [15:34:33] [main/WARN]: Mod file C:\Users\esteb\curseforge\minecraft\Install\libraries\net\minecraftforge\mclanguage\1.20.1-47.4.0\mclanguage-1.20.1-47.4.0.jar is missing mods.toml file [15:34:33] [main/INFO]: Found mod file fmlcore-1.20.1-47.4.0.jar of type LIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@6c9320c2 [15:34:33] [main/INFO]: Found mod file javafmllanguage-1.20.1-47.4.0.jar of type LANGPROVIDER with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@6c9320c2 [15:34:33] [main/INFO]: Found mod file lowcodelanguage-1.20.1-47.4.0.jar of type LANGPROVIDER with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@6c9320c2 [15:34:33] [main/INFO]: Found mod file mclanguage-1.20.1-47.4.0.jar of type LANGPROVIDER with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@6c9320c2 [15:34:33] [main/INFO]: Found mod file client-1.20.1-20230612.114412-srg.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@6c9320c2 [15:34:33] [main/INFO]: Found mod file forge-1.20.1-47.4.0-universal.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@6c9320c2 [15:34:34] [main/WARN]: Attempted to select two dependency jars from JarJar which have the same identification: Mod File:  and Mod File: . Using Mod File: [15:34:34] [main/INFO]: Found 37 dependencies adding them to mods collection [15:34:34] [main/INFO]: Found mod file bcel-6.6.1.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file kuma-api-forge-20.1.10+1.20.1.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file aspectjrt-1.8.2.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file sedna.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file mixinsquared-forge-0.1.1.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file kfflang-4.11.0.jar of type LANGPROVIDER with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file Registrate-MC1.20-1.3.3.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file Ponder-Forge-1.20.1-1.0.80.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file google-api-client-java6-1.20.0.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file mclib-20.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file kffmod-4.11.0.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file kfflib-4.11.0.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file flywheel-forge-1.20.1-1.0.4.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file bytecodecs-1.0.2.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file curios-forge-5.6.1+1.20.1.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file jgltf-model-3af6de4.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file lwjgl-utils-27dcd66.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file MixinExtras-0.4.1.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file MixinSquared-0.1.1.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file opennbt-0a02214.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file mixinextras-forge-0.2.0-beta.9.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file luaj-jse-3.0.8-figura.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file luaj-core-3.0.8-figura.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file MathParser.org-mXparser-5.2.1.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file cumulus_menus-1.20.1-1.0.1-neoforge.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file yabn-1.0.3.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file commons-exec-1.3.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file flightlib-forge-2.1.0.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file nitrogen_internals-1.20.1-1.0.12-neoforge.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file 2.79.0-a0696f8.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file google-api-client-gson-1.20.0.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file google-oauth-client-jetty-1.20.0.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file google-api-services-youtube-v3-rev178-1.22.0.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file isoparser-1.1.7.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file jlayer-1.0.1.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file commons-math3-3.6.1.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found mod file lwjgl-tinyexr-3.3.1.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@5f14761c [15:34:34] [main/INFO]: Found Kotlin-containing mod Jar[union:/C:/Users/esteb/curseforge/minecraft/Instances/Engineering%20(1)/essential/libraries/forge_1.20.1/kotlin-for-forge-4.3.0-slim.jar%23281!/], checking whether we need to upgrade it.. [15:34:34] [main/INFO]: Found outdated Kotlin core libs 0.0.0 (we ship 1.9.23) [15:34:34] [main/INFO]: Found outdated Kotlin Coroutines libs 0.0.0 (we ship 1.8.0) [15:34:34] [main/INFO]: Found outdated Kotlin Serialization libs 0.0.0 (we ship 1.6.3) [15:34:34] [main/INFO]: Generating jar with updated Kotlin at C:\Users\esteb\AppData\Local\Temp\kff-updated-kotlin-12908758738589143542-4.3.0-slim.jar [15:34:35] [main/INFO]: Found Kotlin-containing mod Jar[union:/C:/Users/esteb/curseforge/minecraft/Instances/Engineering%20(1)/mods/kotlinforforge-4.11.0-all.jar%23332!/], checking whether we need to upgrade it.. [15:34:35] [main/INFO]: Found up-to-date Kotlin core libs 2.0.0 (we ship 1.9.23) [15:34:35] [main/INFO]: Found up-to-date Kotlin Coroutines libs 1.8.1 (we ship 1.8.0) [15:34:35] [main/INFO]: Found up-to-date Kotlin Serialization libs 1.6.3 (we ship 1.6.3) [15:34:35] [main/INFO]: All good, no update needed: Jar[union:/C:/Users/esteb/curseforge/minecraft/Instances/Engineering%20(1)/mods/kotlinforforge-4.11.0-all.jar%23332!/] [15:34:38] [main/INFO]: Compatibility level set to JAVA_17 [15:34:38] [main/INFO]: Launching target 'forgeclient' with arguments [--version, forge-47.4.0, --gameDir, C:\Users\esteb\curseforge\minecraft\Instances\Engineering (1), --assetsDir, C:\Users\esteb\curseforge\minecraft\Install\assets, --uuid, 146b16bc1d204d99876f65014406b450, --username, Este_17000, --assetIndex, 5, --accessToken, ????????, --clientId, MTdiNGM1M2QtMjQzYS00ZDZjLTliOTctMjFiZDY4ZGVkZWQ3, --xuid, 2535454605082131, --userType, msa, --versionType, release, --width, 1024, --height, 768, --quickPlayPath, C:\Users\esteb\curseforge\minecraft\Install\quickPlay\java\1751031268199.json] [15:34:38] [main/WARN]: Reference map 'nitrogen_internals.refmap.json' for nitrogen_internals.mixins.json could not be read. If this is a development environment you can ignore this message [15:34:39] [main/INFO]: Starting Essential v1.3.8.2 (#0a59fb020d) [stable] [15:34:39] [main/WARN]: Error loading class: dev/latvian/mods/kubejs/recipe/RecipesEventJS (java.lang.ClassNotFoundException: dev.latvian.mods.kubejs.recipe.RecipesEventJS) [15:34:39] [main/WARN]: @Mixin target dev.latvian.mods.kubejs.recipe.RecipesEventJS was not found mixins.hammerlib.json:bs.kubejs.RecipeEventJSMixin [15:34:40] [main/WARN]: Error loading class: net/optifine/render/ChunkVisibility (java.lang.ClassNotFoundException: net.optifine.render.ChunkVisibility) [15:34:40] [main/WARN]: Error loading class: shadersmod/client/ShadersRender (java.lang.ClassNotFoundException: shadersmod.client.ShadersRender) [15:34:40] [main/WARN]: Error loading class: net/optifine/shaders/ShadersRender (java.lang.ClassNotFoundException: net.optifine.shaders.ShadersRender) [15:34:40] [main/WARN]: Error loading class: net/irisshaders/iris/uniforms/CommonUniforms (java.lang.ClassNotFoundException: net.irisshaders.iris.uniforms.CommonUniforms) [15:34:40] [main/WARN]: Error loading class: net/irisshaders/iris/Iris (java.lang.ClassNotFoundException: net.irisshaders.iris.Iris)     Please help me ! Thanks !
    • We are excited to announce that the code ALB496107 is your key to unlocking maximum benefits, especially for our valued customers in European nations. This code is specifically tailored to provide significant discounts across various countries, ensuring you can enjoy premium products at unbeatable prices. Whether you're searching for a Temu coupon code 2025 for existing customers or a Temu 30% discount coupon to kickstart your shopping spree, we've got you covered. Get ready to explore an endless marketplace of deals and discounts that will leave you smiling. What Is The Temu Coupon Code 30% Off? We're excited to let you know that both new and existing customers can unlock incredible value using our verified Temu coupon 30% off. This is your chance to redeem a 30% off Temu coupon code instantly and save big! Whether you're making your very first purchase or you're a seasoned Temu shopper, this code is designed to bring you fantastic savings. Here are some of the incredible offers you can unlock with our coupon code ALB496107: ALB496107: Enjoy a flat 30% discount for new users, allowing for substantial savings right from the start. ALB496107: Get 30% extra off for existing users, rewarding your continued loyalty with impressive discounts. ALB496107: Unlock a 100€ coupon pack for multiple uses, allowing you to spread your savings across several future purchases. ALB496107: Avail 100€ flat discount as a new Temu customer, providing a substantial immediate saving on your initial order. ALB496107: Grab a 100€-300€ coupon for European users, maximizing benefits across your region. Temu Coupon Code 30% Off For New Users New users are in for a special treat! We guarantee that you can get the highest benefits if you use our coupon code on the Temu app. Claim your Temu coupon 30% off or your Temu coupon code 30 off for existing users (yes, it works for new users too!) today, and prepare to be amazed by the savings. Here's what awaits you with the ALB496107 code: ALB496107: A flat 30% discount for new users on their very first order, making your initial purchase remarkably affordable. ALB496107: A 30% extra discount for old users, an unexpected bonus even for new sign-ups engaging with the platform. ALB496107: Receive a 100€ coupon bundle for new customers, providing you with a versatile set of discounts. ALB496107: Get up to 100€ in coupon bundles for multiple uses, ensuring you keep saving on future orders. ALB496107: Enjoy vouchers worth 100€-300€, giving you significant reductions on a wide range of items. ALB496107: Benefit from free shipping to 68 countries, making your initial purchases even more cost-effective by eliminating delivery fees. ALB496107: Get an extra 30% off on any purchase for first-time users, supercharging your savings on top of the already incredible discounts. ALB496107: Access special deals of up to 90% off, giving you unparalleled opportunities to snag items at a fraction of their original price. How To Redeem The Temu 30% Off Coupon Code For New Customers? Redeeming your Temu 30% off coupon code is a breeze! We want to make sure you get your savings as quickly and effortlessly as possible. This step-by-step guide will walk you through the process of applying your Temu 30 off coupon code to your first order. Download the Temu app or visit the official website: Start by accessing Temu through their user-friendly mobile application or by heading to their official website on your desktop. Register as a new customer: If you haven't already, create a new Temu account. This process is quick and simple, typically requiring just your email address or phone number. Creating a new account is essential to qualify for the exclusive new user benefits associated with our coupon. Browse and add items to your shopping cart: Explore Temu's vast selection of products, from electronics to fashion, home goods, and more. Add all the items you wish to purchase to your cart. Proceed to checkout: Once you've finished shopping, navigate to your shopping cart and click on the "Checkout" button to begin the payment process. Find the coupon code field: On the checkout page, look for a field labeled "Enter Coupon Code," "Promo Code," or "Discount Code." This is where you'll input your exclusive code. Enter the coupon code ALB496107: Carefully type or paste the code ALB496107 into the designated field. It's crucial to enter the code precisely to ensure it is recognized by the system. Click "Apply": After entering the code, click on the "Apply" or "Redeem" button next to the field. You should immediately see the 30% discount reflected in your order total, showing the reduced price. Complete your purchase: With your savings applied, review your order and proceed to finalize your purchase by entering your shipping address and preferred payment information. Congratulations, you've just saved big on your first Temu order! Temu Coupon Code 30% Off For Existing Users Returning users, rejoice! You can also grab huge savings using our Temu 30 off coupon code and enjoy the Temu coupon code for existing customers. We value your continued support, and that's why we've ensured our exclusive code ALB496107 brings incredible benefits for loyal Temu shoppers. Here are the exciting benefits existing Temu users can unlock with the ALB496107 code: ALB496107: Provides a 30% extra discount for existing Temu users, directly rewarding your continued patronage with significant price reductions. ALB496107: Unlocks a 100€ coupon bundle for multiple purchases, ensuring you have a continuous stream of discounts for your shopping needs. ALB496107: Includes a free gift with express shipping all over Europe, adding an extra delightful surprise and faster delivery to your order. ALB496107: Grants an extra 40% off on top of existing discounts, allowing you to combine savings for even greater overall value. ALB496107: Provides special deals of up to 90% off, giving you access to deeply discounted items across various categories. ALB496107: Comes with 100€-300€ discount vouchers, enabling you to save substantially on higher-value purchases. ALB496107: Ensures free shipping to 68 countries, providing a cost-effective and hassle-free delivery for your international orders. How To Use The Temu Coupon Code 30% Off For Existing Customers? Using the Temu coupon code 30 off and Temu discount code for existing users is just as simple as it is for new users! We want to make sure our loyal customers can continue to enjoy fantastic savings effortlessly. Follow these easy steps to apply your discount and maximize your shopping experience. Open the Temu app or go to the website: Launch the Temu mobile application on your smartphone or tablet, or access the Temu website through your preferred web browser. Log in using your existing account: Enter your login credentials (email/phone number and password) to access your current Temu account. Add items to your cart: Browse through the extensive range of products and add the items you wish to purchase to your shopping cart. Take your time to find everything you need or desire! Proceed to checkout: Once your cart is full, click on the checkout button to begin the purchase process. Locate the "Apply Coupon" or "Promo Code" section: On the checkout page, look for the field where you can enter a coupon code or promo code. It's usually prominently displayed to ensure you don't miss it. Enter the coupon code ALB496107: Carefully type or paste the code ALB496107 into this designated field. Double-check for any typos to ensure the code is applied successfully. Click "Apply": Hit the "Apply" button, and you'll see the discount instantly applied to your order total. The system will reflect the reduced price, showing your savings. Confirm the discount and finalize your order: Verify that the 30% off (or other associated benefits) has been applied correctly. Then, proceed to complete your purchase by confirming your shipping details and payment method. Enjoy your fantastic savings! How To Find The Temu Coupon Code 30% Off? Looking for the Temu coupon code 30% off first order or hunting for the latest Temu coupons 30% off? We understand you want to ensure you're getting the best possible deals, and we're here to guide you to the most reliable sources. One of the most straightforward ways to get verified and tested coupons is by signing up for the Temu newsletter. When you subscribe, you'll receive exclusive deals and promotions delivered directly to your inbox, often including codes specifically for a 30% discount or substantial coupon bundles. This is a direct line to savings that you won't want to miss. Additionally, visiting Temu’s social media pages is a fantastic way to stay in the loop about the latest offers and promotions. Temu frequently announces flash sales, limited-time deals, and new coupon codes on platforms like Facebook, Instagram, and Twitter. Following their official accounts ensures you're always among the first to know when a great deal drops. Finally, you can always find the latest and working Temu coupon codes by visiting any trusted coupon site, like ours! We diligently collect, verify, and update coupon codes from various e-commerce sites to ensure our users have access to the most current and effective discounts. We pride ourselves on providing reliable information so you can shop with confidence, knowing you're getting the best deal available. How Do Temu 30% Off Coupons Work? A Temu coupon code 30% off first time user or any Temu coupon code 30 percent off works by providing a substantial discount on your total purchase amount when applied during the checkout process. It's designed to be a straightforward and beneficial tool for your shopping. When you enter a valid coupon code like ALB496107 into the designated "Coupon Code" or "Promo Code" field at checkout, Temu's system automatically calculates the discount. It then deducts that percentage (in this case, 30%) from your order total. For new users, this typically applies to your first order, making it an incredibly attractive incentive to try the platform and explore its vast offerings. For existing users, these codes often provide additional savings on top of ongoing promotions or serve as a loyalty reward, giving you an extra percentage off your next purchase. The system is designed to apply the maximum eligible savings, so you can be confident you're getting the best deal. How To Earn 30% Off Coupons In Temu As A New Customer? As a new customer, earning a Temu coupon code 30% off or a Temu 30 off coupon code first order is remarkably easy and often a built-in part of the Temu new user experience. Temu is keen to welcome new shoppers and provides attractive incentives to get you started on your savings journey. Primarily, new customers can earn 30% off benefits by simply using exclusive coupon codes like ALB496107 during their very first purchase. When you download the Temu app or visit the website for the first time and create an account, you'll often be presented with opportunities to apply a welcome code. Additionally, signing up for Temu's newsletter is a great way to receive these exclusive first-time user coupons directly to your inbox. Sometimes, Temu also offers pop-up promotions on their website or app for new visitors, encouraging them to make their initial purchase with a significant discount. By taking advantage of these readily available new user incentives, you can effortlessly secure a 30% discount right from the start. What Are The Advantages Of Using Temu 30% Off Coupons? Using our Temu 30% off coupon code legit and coupon code for Temu 30 off provides a plethora of advantages that significantly enhance your shopping experience on Temu. We believe in maximizing your savings, and these coupons are designed to do just that. Here are all the incredible benefits you can enjoy: 30% discount on the first order: This is a fantastic welcome for new users, instantly reducing the cost of your initial purchase and making it incredibly appealing to explore Temu's offerings. 100€ coupon bundle for multiple uses: Beyond the initial discount, you gain access to a valuable bundle of coupons totaling 100€, ensuring continuous savings on your future shopping sprees. 75% discount on popular items: Imagine getting your hands on highly sought-after products at a fraction of their original price. Our coupons often unlock substantial discounts on trending items. Extra 30% off for existing Temu customers: Your loyalty is rewarded! Even if you're a returning shopper, you can enjoy additional savings on top of existing promotions, making every purchase more economical. Up to 90% off in selected items: Dive into clearance sales and special promotions where our coupons can combine with already reduced prices to give you mind-blowing discounts of up to 90%. Free gift for new users: As a welcome gesture, new users often receive a complimentary gift with their first order, adding an extra layer of delight to your shopping. 100€-300€ discount vouchers: For larger purchases or specific categories, these high-value vouchers offer substantial fixed discounts, making expensive items much more affordable. Free delivery to 68 countries: Say goodbye to shipping fees! Our coupon code can grant you free shipping to a wide range of countries, including those across Europe, making your shopping experience even more convenient and cost-effective. Temu Free Gift And Special Discount For New And Existing Users We are thrilled to tell you that there are multiple benefits to using our Temu 30% off coupon code and 30% off Temu coupon code. This code is a powerhouse of savings, designed to provide incredible value for both first-time shoppers and our loyal returning customers. You'll be amazed at how much you can save and the extra perks you'll receive. Here are the fantastic benefits you can unlock with the ALB496107 code: ALB496107: Get a 30% extra discount on your first order, making your introduction to Temu incredibly economical and rewarding. ALB496107: Unlock extra 30% off on any item, giving you flexibility to apply significant savings to whatever you choose to purchase. ALB496107: Claim a free gift as a new Temu user, a delightful bonus to celebrate your first shopping experience with us. ALB496107: Score up to 90% discount on any item on the Temu app, providing access to extraordinary deals on a vast selection of products. ALB496107: Receive a free gift with free shipping in 68 countries including the UK, making your delivery not only free but also accompanied by a pleasant surprise. Pros And Cons Of Using Temu Coupon Code 30% Off We believe in transparency, so let's look at the good and the not-so-bad of using the Temu coupon 30% off code and Temu free coupon code 30 off. We want you to be fully informed to make the most of your shopping experience. Pros: Flat 30% off instantly on your purchases. Works for both new and existing users, ensuring everyone benefits. Access to substantial 100€-300€ coupon bundles for more savings. Potential for free gifts and express delivery, enhancing your overall experience. Can often be stacked with existing promotions and flash sales for even deeper discounts. Cons: Availability might depend on your specific region or country (though our code covers 68 countries). Some highly specialized or extremely low-priced items might have limited additional discounts. The "free gift" might be a surprise item, which may not always align with your exact needs or preferences. Terms And Conditions Of The Temu 30% Off Coupon Code In 2025 When using the Temu coupon code 30% off free shipping and our verified Temu coupon code 30% off reddit mentioned code, it's important to be aware of the terms and conditions to ensure a smooth and successful redemption. We've made these terms as favorable as possible for our users. Here are the important details you need to know: Our coupon code doesn’t have any expiration date; you can use them anytime you want throughout 2025 and beyond. Our coupon code is valid for both new and existing users, ensuring everyone can benefit from these amazing discounts. The code is applicable in 68 countries worldwide, including all major European nations, expanding your savings reach globally. There are no minimum purchase requirements for using our Temu coupon code, so you can enjoy the discount even on small orders. The code can be used on both the Temu mobile application and the official website, offering flexibility in how you shop. While the 30% off is a guaranteed discount, additional benefits like coupon bundles or free gifts might be subject to stock availability. In some cases, the 30% discount may be applied as a flat amount rather than a percentage, depending on the specific promotion or item. Final Note We hope this comprehensive guide has empowered you to unlock incredible savings with the Temu coupon code 30% off. We are committed to helping you make the most of your online shopping, ensuring you get quality products at unbeatable prices. Don't miss out on this fantastic opportunity to enhance your shopping experience with the Temu 30% off coupon. Start exploring Temu today and enjoy a world of savings right at your fingertips! FAQs Of Temu 30% Off Coupon  What is the best Temu coupon code for 30% off? Use code ALB496107 for the best 30% discount, valid across Europe for all users. This code is designed to give you maximum benefits, whether you're a new or existing customer, ensuring significant savings on your purchases.  Can I use the ALB496107 code more than once? Yes, the ALB496107 code is valid for multiple uses and works for both new and returning customers. This means you can keep enjoying continuous savings on your subsequent Temu orders.  Is the 30% Temu coupon code available worldwide? While our ALB496107 code is broadly applicable, it is specifically designed and optimized for use in 68 supported countries, primarily focusing on European nations. It aims to provide the best value in these regions.  Does the Temu 30% coupon expire? No, our exclusive coupon code ALB496107 does not have a set expiration date. You can use it anytime throughout 2025 and beyond, making it a reliable source for ongoing discounts.  How can I verify if the 30% Temu coupon code is legit? We assure you that our Temu coupon code ALB496107 is 100% legitimate and verified. We regularly test and confirm its functionality to ensure you receive the promised discounts without any issues.  
    • The magic code, ALB496107, is specifically designed to give maximum benefits, especially for our valued shoppers in European nations. Whether you're in the bustling cities of the UK or across the continent, this code is your passport to unparalleled discounts and a delightful shopping spree. We believe everyone deserves access to quality products without breaking the bank, and this code helps us deliver on that promise. For those wondering about ongoing savings, we have great news! We also cater to returning customers, ensuring that loyalty is rewarded. You’ll be excited to discover that both Temu coupon code 2025 for existing customers and a substantial Temu 40% discount coupon are available through our platform, ensuring everyone can enjoy amazing deals on their favorite items. What Is The Temu Coupon Code 40% off? We are delighted to share that our exclusive 40% off coupon code for Temu provides incredible benefits for both new and existing customers when used on the Temu app and website. This special offer ensures that everyone can enjoy substantial savings, whether they are making their first purchase or are a loyal shopper. We've worked hard to bring you this Temu coupon 40% off, ensuring it’s a truly rewarding experience for all. You'll find that this 40% discount Temu coupon is designed to maximize your savings. Here are the amazing benefits you can expect from using our code ALB496107: ALB496107: Enjoy a flat 40% discount exclusively for all new users on their very first order. ALB496107: Existing users are also included in the savings, receiving a generous 40% off their purchases. ALB496107: Unlock a massive 100€ coupon pack, giving you multiple opportunities to save on various future orders. ALB496107: New customers can revel in a fantastic 100€ flat discount right on their initial order, making it an unbeatable start. ALB496107: Loyal existing customers are not left out; they receive an extra 100€ off promo code, rewarding their continued support. ALB496107: Specifically for our new European users, there's an incredible 100€-300€ coupon bundle to kickstart their savings journey. Temu Coupon Code 40% Off For New Users For our new users, the benefits are truly exceptional when you apply our coupon code on the Temu app. We aim to give you the warmest welcome possible to the world of Temu, and this offer is designed to maximize your savings right from the start. This Temu coupon 40% off is tailored to provide the highest value, ensuring your first experience is both exciting and economical. You’ll be delighted to know that there are also perks similar to a Temu coupon code 40 off for existing users, making it a win-win for everyone! Here's how ALB496107 empowers new users: ALB496107: Get a flat 40% discount immediately applied to your first order as a new user. ALB496107: Receive a valuable 100€ coupon bundle, perfect for saving on subsequent purchases as you explore Temu’s vast offerings. ALB496107: Enjoy access to an incredible up to 100€ coupon bundle that can be used multiple times, ensuring ongoing savings. ALB496107: Unlock generous 100€-300€ discount vouchers, giving you substantial price reductions on a wide range of items. ALB496107: Benefit from free shipping to 68 countries worldwide, making your initial delivery smooth and cost-free. ALB496107: Receive an extra 40% off on any purchase for first-time users, an exceptional bonus that sweetens the deal even further. How To Redeem The Temu 40% Off Coupon Code For New Customers? Redeeming your Temu 40% off coupon code is incredibly simple, ensuring you can start saving immediately on your first purchase. We’ve streamlined the process to make it as smooth and user-friendly as possible, so you can focus on enjoying your new items. This Temu 40 off coupon code is designed for your convenience. Here’s a step-by-step guide on how to use the coupon in Temu: Download the Temu app or visit the official website: Begin by downloading the Temu application on your smartphone or by navigating to Temu’s official website through your web browser. Register as a new user: Create a new account using your email address or mobile number. The process is quick and straightforward, welcoming you to the Temu community. Browse and add your desired products to the cart: Explore Temu’s extensive catalog of products, from fashion and electronics to home goods and accessories. Add all the items you wish to purchase to your shopping cart. Proceed to checkout: Once you’ve finished shopping, click on the shopping cart icon and proceed to the checkout page. Enter ALB496107 during checkout: On the checkout page, you will find a designated field for "Coupon Code" or "Promo Code." Carefully type or paste ALB496107 into this box. Click “Apply”: After entering the code, click the "Apply" button. You will instantly see the 40% discount reflected in your total purchase amount. Complete your payment: Finalize your order by selecting your preferred payment method and completing the purchase. Enjoy your incredible savings! Temu Coupon Code 40% Off For Existing Users We understand that loyalty deserves to be rewarded, which is why existing users can also enjoy fantastic benefits by using our coupon code on the Temu app. This ensures that every time you shop with Temu, you have the opportunity to save even more. The Temu 40 off coupon code is not just for new customers; it's also a treat for our loyal shoppers. We are committed to providing the best deals, and this Temu coupon code for existing customers is a testament to that commitment. Here's how ALB496107 brings extra value to existing Temu users: ALB496107: Receive a 40% extra discount on your purchases as an existing Temu user, making your continued shopping even more rewarding. ALB496107: Gain access to a valuable 100€ coupon bundle that can be utilized for multiple purchases, allowing you to spread your savings across various orders. ALB496107: Enjoy a free gift with express shipping all over Europe, adding an extra touch of delight to your shopping experience. ALB496107: Benefit from an extra 30% off on top of any existing discounts, maximizing your overall savings on already reduced items. ALB496107: Continue to enjoy free shipping to 68 countries, making repeat orders even more convenient and cost-effective. How To Use The Temu Coupon Code 40% Off For Existing Customers? Applying the Temu coupon code 40 off as an existing customer is just as easy and rewarding as it is for new users. We want to ensure that your continued loyalty is acknowledged and celebrated with fantastic savings. This Temu discount code for existing users is straightforward to apply, so you can keep enjoying great prices. Follow these simple steps to apply the coupon in Temu as an existing user: Open the Temu app or visit the website: Launch the Temu application on your device or go to the official Temu website. Log in to your existing account: Enter your credentials to log in to your established Temu account. Add items to your cart: Browse through the vast selection of products and add the items you wish to purchase to your shopping cart. Proceed to checkout: Click on your shopping cart and navigate to the checkout page. Enter ALB496107 in the promo section at checkout: Locate the "Coupon Code" or "Promo Code" field on the checkout page. Enter ALB496107 into this box. Apply the code: Click the "Apply" button. The discount will be automatically adjusted in your total, reflecting your savings. Complete your purchase: Review your updated order total and proceed to complete your payment. Enjoy the added savings! How To Find The Temu Coupon Code 40% Off? Finding a reliable Temu coupon code 40% off first order or hunting for the latest Temu coupons 40 off can be an exciting quest, and we’re here to guide you to the best sources. We understand the importance of verified and working coupon codes to truly enhance your shopping experience. Here’s how you can get your hands on legitimate and tested coupons: Firstly, a smart move for any savvy shopper is to sign up for the official Temu newsletter. Temu frequently sends out exclusive coupon codes, promotions, and early access to sales directly to their subscribers. This is often where you'll find some of the most lucrative offers, ensuring you're always in the loop. Secondly, we highly recommend visiting Temu’s official social media pages. Platforms like Facebook, Instagram, and Twitter are vibrant hubs where Temu regularly announces flash sales, limited-time promotions, and sometimes even unique coupon codes as part of their marketing campaigns. Following them ensures you catch these time-sensitive opportunities. Lastly, and perhaps most effectively, you can find the latest and working Temu coupon codes by visiting trusted coupon sites like ours. We diligently update our listings with verified codes, ensuring that what you find here is current and effective. We take pride in curating the best deals so you don’t have to waste time searching for non-working coupons. Bookmark our page and check back regularly to unlock consistent savings! How Temu 40% Off coupons work? The Temu coupon code 40% off first time user and the Temu coupon code 40 percent off work by applying a direct discount to your purchase once the valid code is entered at checkout. It's a straightforward process designed to give you instant savings. When you enter a valid Temu 40% off coupon code, the system immediately recognizes the code and assesses its applicability to your order. If you are a new user, this could mean a flat 40% reduction on your entire first purchase. For existing users, the 40% off might manifest as a specific discount on certain categories, a percentage off your total, or contribute to a larger coupon bundle. The technology behind it automatically calculates the savings based on the coupon's terms and the items in your cart, reflecting the reduced price before you finalize your payment. This ensures transparency and immediate gratification, making your shopping experience more affordable and enjoyable. The goal is to make high-quality products accessible at lower prices, and these coupons are a key tool in achieving that for our users. How To Earn 40% Off Coupons In Temu As A New Customer? Earning Temu coupon code 40% off and Temu 40 off coupon code first order as a new customer is designed to be incredibly rewarding and easy, ensuring you start your Temu journey with significant savings. The primary way to earn these fantastic 40% off coupons as a new Temu customer is by simply signing up for a new account and making your initial purchase. Temu often provides substantial welcome bonuses, and our exclusive code ALB496107 is specifically tailored to unlock these maximum benefits for first-time users. When you download the Temu app, you'll often be presented with immediate offers or prompts to use a new user code. Furthermore, participating in Temu's referral programs (if available) or completing simple onboarding tasks, such as creating your profile or linking a payment method, can sometimes trigger additional coupon bundles. The platform is designed to encourage new sign-ups with attractive discounts, making it effortless to receive a flat 40% discount on your first order, free shipping, and often even bonus coupons worth 100€ or more to use on future purchases. Always keep an eye out for these initial prompts when you join, as they are your golden ticket to unlocking the best deals. What Are The Advantages Of Using Temu 40% Off Coupons? Using our Temu 40% off coupon code legit offers a wealth of incredible advantages that significantly enhance your shopping experience on the platform. We are committed to helping you save money, and this coupon code for Temu 40 off is your gateway to unparalleled value. Here are all the fantastic benefits you stand to gain: 40% discount on the first order: Instantly save big on your initial purchase, making your introduction to Temu incredibly cost-effective. 40% discount for existing customers: Loyalty is celebrated! Our existing users also enjoy a generous 40% off, ensuring continued savings. 100€ coupon bundle for multiple uses: Unlock a valuable coupon pack that can be applied to several different orders, maximizing your long-term savings. 75% discount on popular items: Get astonishing discounts on some of Temu's most sought-after products, allowing you to grab incredible deals. Extra 30% off for existing Temu customers: On top of your 40% discount, loyal customers can often enjoy an additional 30% off on various items. Up to 90% off in selected items: Discover mind-blowing reductions on special selections, giving you access to premium products at unbelievably low prices. Free gift for new users: As a welcome gesture, new customers often receive a complimentary gift with their first purchase, adding extra delight. 100€-300€ discount vouchers: Access a range of high-value vouchers that provide substantial monetary reductions on your orders. Free delivery to 68 countries: Enjoy the convenience and added savings of free shipping to a vast number of countries, including all major European nations. Temu Free Gift And Special Discount For New And Existing Users We are excited to share that there are truly multiple benefits to using our Temu 40% off coupon code, extending beyond just a straightforward discount. This 40% off Temu coupon code is a comprehensive package designed to offer exceptional value to both our new and existing users. We want your Temu experience to be as rewarding and delightful as possible, filled with amazing savings and pleasant surprises. Here are the diverse benefits you can unlock with ALB496107: ALB496107: Receive a fantastic 40% discount on your very first order, setting you up for incredible savings from the start. ALB496107: Existing customers also get to enjoy a generous 40% off, ensuring that your continued patronage is truly valued. ALB496107: Unlock an extra 30% off on any item, giving you an additional layer of savings on top of other potential discounts. ALB496107: New Temu users are treated to a special free gift with their initial purchase, adding a delightful surprise to their order. ALB496107: Gain access to discounts of up to 90% on various items available on the Temu app, allowing you to snag extraordinary deals. ALB496107: Enjoy a free gift accompanied by free shipping in 68 countries, including the UK, making your shopping experience even more convenient and cost-effective. Pros And Cons Of Using Temu Coupon Code 40% Off Every great offer comes with its advantages and a few considerations, and our Temu coupon 40% off code is no exception. We believe in transparency, so let’s look at the pros and cons of using this Temu free coupon code 40 off. Pros: Flat 40% savings: Enjoy a substantial and immediate reduction on your purchases. Available to both new and existing users: Inclusive benefits mean everyone can save. 100€-300€ coupon bundles: Access to significant coupon packs for ongoing discounts. Free gifts and shipping: Added value through complimentary items and delivery. Stacks with flash deals on Temu: Potentially combine with existing sales for even deeper discounts. Cons: Limited to 68 eligible countries: While extensive, it's not universally applicable. May not combine with other exclusive coupons: Sometimes, only one major discount can be applied per order. App download may be required for some promotions: Certain offers might necessitate using the Temu mobile application. Terms And Conditions Of The Temu 40% Off Coupon Code In 2025 Understanding the terms and conditions of the Temu coupon code 40% off free shipping is crucial for maximizing your savings. We want to ensure clarity and transparency, so you can confidently use our code. While you might stumble upon discussions like Temu coupon code 40% off reddit, we provide direct and verified information. Here are the key terms and conditions for our Temu coupon code in 2025: Our specific coupon code, ALB496107, does not have any expiration date, allowing you the flexibility to use it anytime you wish. The coupon code, ALB496107, is valid for both new and existing users, ensuring that everyone can benefit from the incredible discounts. This versatile coupon code is applicable in a wide range of locations, specifically valid in 68 countries worldwide, including numerous European nations. There are no minimum purchase requirements for using our Temu coupon code, meaning you can enjoy the 40% discount on orders of any size. Final Note We truly hope this comprehensive guide on the Temu coupon code 40% off empowers you to shop smarter and save more. It's our mission to provide you with the best deals available, ensuring your online shopping is always a rewarding experience. Don't miss out on this fantastic opportunity to elevate your shopping game! Grab your Temu 40% off coupon and start exploring the incredible world of Temu with unbeatable discounts today. FAQs Of Temu 40% Off Coupon Is the Temu 40% off coupon code available for all users? Yes, our specific coupon code ALB496107 is valid for both new and existing customers. You can use it on the Temu app or website to unlock significant savings, regardless of whether it's your first purchase or a repeat order.  How many times can I use the Temu 40% off coupon?  For new users, the flat 40% discount generally applies to your first order. Existing users may receive coupon bundles, like the 100€ coupon pack, which can be used multiple times for various purchases, maximizing ongoing savings.  Is the Temu 40% off coupon code legitimate? Absolutely! Our code ALB496107 is verified, tested, and regularly updated to ensure it works seamlessly for all eligible users. We are a trusted source for coupon codes and are committed to providing genuine discounts.  Does the Temu 40% off coupon code have an expiration date?  No, our specific Temu coupon code ALB496107 does not have an expiration date. You can use it whenever you're ready to make a purchase on Temu, without worrying about it running out.  Can I combine the Temu 40% off coupon with other deals? While our 40% off coupon offers substantial savings, its combinability with other ongoing flash deals or exclusive promotions on Temu may vary. Always check the specific terms of any other offers to see if they can be stacked.
    • This phenomenal offer comes with the exclusive Temu coupon code ALB496107, designed to provide maximum benefits for our valued shoppers across Western countries. Whether you're in the USA, Canada, or any of the European nations, this code is your ultimate key to unlocking amazing discounts and enjoying a truly rewarding shopping spree. We've made sure this code is tailored to give you the most significant savings. Prepare to be amazed by the discounts you can achieve with our special offer, especially as we bring you the latest details for July 2025. With the potent Temu coupon $200 off and the highly sought-after Temu 100 off coupon code, you’re poised to make your money go further than ever before. We are committed to helping you save substantially on every purchase. What Is The Coupon Code For Temu $200 Off? We are delighted to confirm that both new and existing customers can achieve amazing benefits when they utilize our special $200 coupon code on the Temu app and website. This means everyone gets a chance to save big with our Temu coupon $200 off and the highly sought-after $200 off Temu coupon. We believe in rewarding all our shoppers! Here's how the ALB496107 code works to bring you exceptional value: ALB496107: Enjoy a flat $200 off your entire purchase, giving you instant savings at checkout. ALB496107: Access a fantastic $200 coupon pack, allowing you to enjoy multiple discounts across various orders. ALB496107: New customers receive a generous $200 flat discount, making your first Temu experience truly special. ALB496107: Existing users are also rewarded with an extra $200 promo code, ensuring your loyalty is celebrated with significant savings. ALB496107: This $200 coupon is perfectly tailored for USA/Canada users, guaranteeing maximum value in your region. Temu Coupon Code $200 Off For New Users In 2025 We have fantastic news for all our new users in 2025! You can unlock the highest benefits and start your Temu shopping journey with incredible savings by using our exclusive Temu coupon $200 off on the Temu app. This is the perfect opportunity to explore the vast world of Temu and grab everything you need at a significantly reduced price. Don't miss out on this amazing Temu coupon code $200 off designed especially for you. Check out the perks when new users apply the ALB496107 code: ALB496107: As a new user, applying this code will give you a flat $200 discount on your first purchase, allowing you to save big right from the start. ALB496107: New customers will also receive a $200 coupon bundle, providing you with multiple opportunities to save on future orders across various product categories. ALB496107: Using this code can unlock an up to $200 coupon bundle for multiple uses, giving you ongoing discounts as you continue to explore the diverse offerings on Temu. ALB496107: Benefit from free shipping to 68 countries, ensuring your new treasures arrive without extra delivery costs. ALB496107: As a first-time user, applying this code will also grant you an extra 30% off on any purchase, further maximizing your initial savings! How To Redeem The Temu Coupon $200 Off For New Customers? Redeeming your Temu $200 coupon and making the most of your Temu $200 off coupon code for new users is incredibly straightforward. We want to ensure you experience seamless savings from the moment you decide to shop with Temu. Just follow these simple steps to unlock your discount: Download the Temu app or visit their official website: If you haven't already, install the Temu app on your mobile device for the best shopping experience, or head to their website on your computer. Sign up as a new customer: Create a new account using your email address or phone number. This is essential to qualify for the new user benefits. Browse your favorite items and add them to your cart: Explore Temu's vast selection of products, from fashion to electronics, home goods, and more. Fill your cart with everything you desire! Proceed to checkout: Once you're satisfied with your selections, click on the shopping cart icon and proceed to the checkout page. Locate the coupon/promo code field: On the checkout page, you will find a dedicated field for "Apply Coupon," "Promo Code," or "Coupon Code." Carefully enter our exclusive code: ALB496107. Double-check to ensure you've entered the code correctly to avoid any issues. Click "Apply.": After entering the code, click the "Apply" button. You should instantly see the $200 discount reflected in your order total. Complete your purchase: Finalize your payment details and complete your order. Enjoy your amazing savings! Temu Coupon $200 Off For Existing Customers Existing Temu users are not left out; our coupon code is tailored to bring you benefits too. Apply the Temu $200 coupon codes for existing users to get the most value out of your shopping experience. Plus, enjoy the Temu coupon $200 off for existing customers free shipping across many locations. We value your continued support, and that's why we've ensured our exclusive code ALB496107 brings incredible benefits for loyal Temu shoppers. Here are five ways the ALB496107 code helps existing users save more: ALB496107: Existing Temu users can receive a fantastic $200 extra discount on their purchases, making your repeat shopping even more affordable. ALB496107: With this code, you might be eligible for a $200 coupon bundle for multiple purchases, allowing you to enjoy savings across various orders.
  • Topics

×
×
  • Create New...

Important Information

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