Little bug

hello
When i offer a stackitem to player this one recive it when he refresh inventorie it very weird can you help to fix it ?

It would really help to show the code you use that causes it be weird

[code]package fr.terrainwax.LootCrate;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Set;

import ninja.leaping.configurate.commented.CommentedConfigurationNode;
import ninja.leaping.configurate.objectmapping.ObjectMappingException;

import org.spongepowered.api.Sponge;
import org.spongepowered.api.data.key.Keys;
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.event.block.InteractBlockEvent.Secondary;
import org.spongepowered.api.event.cause.Cause;
import org.spongepowered.api.item.ItemType;
import org.spongepowered.api.item.ItemTypes;
import org.spongepowered.api.item.inventory.ItemStack;
import org.spongepowered.api.text.Text;

import com.google.common.reflect.TypeToken;

public class eventUse {

public eventUse(Secondary event, CommentedConfigurationNode config) {
	Cause cause = event.getCause();
	Set<Object> keySet = config.getNode("LootCrate").getChildrenMap().keySet();
	Optional<Player> firstPlayer = cause.first(Player.class);
	Optional<ItemStack> item = firstPlayer.get().getItemInHand();
	List<Text> textList = new ArrayList<Text>();
	if(firstPlayer.get().getItemInHand().isPresent()){
	if(item.get().get(Keys.DISPLAY_NAME).isPresent() && item.get().get(Keys.ITEM_LORE).isPresent()){
	Optional<Text> t = item.get().get(Keys.DISPLAY_NAME);
    Optional<List<Text>> ist = item.get().get(Keys.ITEM_LORE);
	

	if(t.isPresent()){
		if(ist.isPresent()){
		if(t.get().equals(Text.of("LootCrate"))){
			for (Object key : keySet) {
			textList.add(Text.of("LootCrate-"+key));
			if(ist.get().equals(textList)){
			ItemStack origStack = firstPlayer.get().getItemInHand().get();
			firstPlayer.get().sendMessage(Text.of(config.getNode("LootCrate",key,"system").getValue()));
			if(config.getNode("LootCrate",key,"system").getValue().equals("command")){
			 List<String> commandlist = null;
			try {
				commandlist = config.getNode("LootCrate",key,"list").getList(TypeToken.of(String.class));
			} catch (ObjectMappingException e) {
				e.printStackTrace();
			}
				for(String command : commandlist){
					firstPlayer.get().sendMessage(Text.of(command.replaceAll("<player>", firstPlayer.get().getName())));
				}
			}else if(config.getNode("LootCrate",key,"system").getValue().equals("item")){
				List<String> itemlist = null;
				try {
					itemlist = config.getNode("LootCrate",key,"list").getList(TypeToken.of(String.class));
				} catch (ObjectMappingException e) {
					e.printStackTrace();
				}
    				for(String item1 : itemlist){
    					firstPlayer.get().sendMessage(Text.of(item1));
    					Optional<ItemType> optionalItemType = Sponge.getRegistry().getType(ItemType.class, item1);
    					firstPlayer.get().sendMessage(Text.of(optionalItemType.isPresent()));
    					firstPlayer.get().getInventory().offer((Sponge.getRegistry().createBuilder(ItemStack.Builder.class).itemType(optionalItemType.get()).build());
    				}
			}
			origStack.setQuantity(firstPlayer.get().getItemInHand().get().getQuantity()-1);
			firstPlayer.get().setItemInHand(origStack);
			event.setCancelled(true);
			}else{
			textList.remove(Text.of("LootCrate-"+key));
			}
			}}
	
		

		
	}}}}
}

}
[/code]
its my class who give item for remove the item its work but when i give they item it does not appear instantly
some one now why ?

you can see all the plugin here : GitHub - terrainwax/LootCrate: Plugin Loot case pour sponge /plugin Loot case for Sponge