Résolu Recette client/serveur
-
Aujourd’hui, j’ai essayé de créer un craft qui donnait un chiffre aléatoire à l’item en question :
package fr.scarex.ascalonmod.recipe; import java.util.Random; import net.minecraft.init.Items; import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import fr.scarex.ascalonmod.AscalonMod; import fr.scarex.ascalonmod.item.AscalonModItems; /** * @author SCAREX * */ public class KeyRecipe implements IRecipe { private static final Random RNG = new Random(); protected ItemStack result; protected Item[][] matrix; protected byte slotIndex; public KeyRecipe(ItemStack result, byte slotIndex, Item[][] matrix) { this.result = result; this.matrix = matrix; this.slotIndex = slotIndex; } public KeyRecipe(CraftMatrix c) { this.result = c.result; this.slotIndex = c.slot; this.matrix = c.matrix; } @Override public boolean matches(InventoryCrafting inv, World world) { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (matrix*[j] != null && (inv.getStackInSlot(i * 3 + j) == null || inv.getStackInSlot(i * 3 + j).getItem() != matrix*[j])) return false; } } return true; } @Override public ItemStack getCraftingResult(InventoryCrafting inv) { NBTTagCompound comp = new NBTTagCompound(); if (slotIndex > 0) comp.setInteger("key", inv.getStackInSlot(slotIndex).getTagCompound().getInteger("key")); else { int i = RNG.nextInt(); AscalonMod.LOGGER.info("matrix : " + i); comp.setInteger("key", i); } ItemStack stack = result.copy(); stack.setTagCompound(comp); return stack; } @Override public int getRecipeSize() { return 9; } @Override public ItemStack getRecipeOutput() { return null; } public static enum CraftMatrix { KEY(new ItemStack(AscalonModItems.ITEM_KEY), -1, new Item[][] { new Item[] { Items.iron_ingot, Items.iron_ingot, null }, new Item[] { null, Items.iron_ingot, null }, new Item[] { null, Items.iron_ingot, null } }); public ItemStack result; public byte slot; public Item[][] matrix; private CraftMatrix(ItemStack stack, int slotIndex, Item[][] matrix) { this.result = stack; this.slot = (byte) slotIndex; this.matrix = matrix; } } }
Malheuresement, j’ai un problème de synchronisation client/serveur car lorsque je passe la souris au-dessus du résultat, il me montre un certain nombre, mais une fois que je le prends le nombre change. (Ce problème a assez peu d’impact vu que le joueur n’est pas censé voir ce chiffre, mais j’ai peur d’avoir des problèmes avec d’autres crafts)
Screenshots :
-
Salut,
Essayes d’enregistrer la recette côté serveur uniquement. -
Si je le met dans le CommonProxy, la méthode n’est pas appelée, si je met dans la fonction matches if (world.isRemote) return false; l’Item ne s’affiche pas mais si je clique sur le slot, il apparaît.
-
Dans ce cas faudrait trouver un moyen de synchro cette valeur avec un paquet.
-
Pas grave, j’abandonne.
-
j’avait ma lut le code dsl