Banco da Lavoro
Link to banco-da-lavoro
Tipi di Ricette
Link to tipi-di-ricette
Ci sono tre tipi di ricette per i banchi da lavoro:
- Informi: Una ricetta informe è una ricetta dove la posizione degli oggetti nella griglia di fabbricazione non è importante.
- Con forma: Una ricetta con forma è una ricetta dove la posizione degli oggetti deve corrispondere ad una predeterminata griglia.
- Con forma riflessa: Una ricetta riflessa è equivalente ad una ricetta con forma, ma può essere specchiata lungo l'asse orizzontale o verticale.
Aggiungere una Ricetta
Link to aggiungere-una-ricetta
Quando aggiungi una ricetta, assicurati che i nomi delle ricette siano unici!
Aggiungere Ricette Informi
Link to aggiungere-ricette-informi
craftingTable.addShapeless(nomeRicetta, risultato, ingredienti, funzioneRicetta);
nomeRicetta
<string>prodotto
<IItemStack>ingredienti
<IIngredient[]>funzioneRicetta
(Opzionale) <RecipeFunctionArray>
Aggiunge una ricetta informe al banco da lavoro. Siccome le ricette informi ignorano la posizione degli oggetti iniziali, l'ordine degli oggetti durante la creazione della ricetta non è importante.
Le ricette informi possono avere fino a 9 elementi in input, ma quelle con 4 input o meno posso anche essere fabbricate nella griglia 2x2 disponibile nell'inventario.
Le ricette del banco da lavoro possono produrre più di un oggetto singolo. Per far ciò, è possibile sfruttare l'operatore di moltiplicazione di IItemStack sull'oggetto prodotto.
ZenScript CopycraftingTable.addShapeless("esempio_informe_1", <item:minecraft:grass>, [<item:minecraft:wheat_seeds>, <item:minecraft:dirt>]);
// Una ricetta senza forma può avere fino a 9 elementi in input
// In questo esempio si può anche notare come si possa avere più
// di un oggetto in output. Difatti, nel seguente esempio, il prodotto sarà di 8 Erbe Alte
craftingTable.addShapeless("esempio_informe_2", <item:minecraft:grass> * 8, [<item:minecraft:wheat_seeds>, <item:minecraft:dirt>, <item:minecraft:dirt>, <item:minecraft:dirt>, <item:minecraft:dirt>, <item:minecraft:dirt>, <item:minecraft:dirt>, <item:minecraft:dirt>, <item:minecraft:dirt>]);
Fai riferimento a Usare le Funzioni Ricetta per alcuni esempi su come usare le funzioni ricetta.
Aggiungere Ricette con Forma e con Forma Riflessa
Link to aggiungere-ricette-con-forma-e-con-forma-riflessa
craftingTable.addShaped(nomeRicetta, prodotto, ingredienti, funzioneRicetta);
craftingTable.addShapedMirrored(nomeRicetta, prodotto, ingredienti, funzioneRicetta);
nomeRicetta
<string>prodotto
<IItemStack>ingredienti
<IIngredient[][]>funzioneRicetta
(Opzionale) <RecipeFunctionMatrix>
Aggiunge una ricetta con forma (o riflessa, a seconda della funzione usata) al banco da lavoro. L'ordine degli oggetti quando la ricetta viene creata detta la posizione di ciascun oggetto all'interno della griglia di fabbricazione.
Rendere la ricetta una ricetta con forma riflessa permette una maggiore flessibilità al giocatore sulla posizione degli oggetti nella griglia di fabbricazione.
Sia le ricette con forma sia quelle con forma riflessa possono essere create per permetterne la fabbricazione in una griglia 2x2 (nell'inventario) o 3x3.
Le ricette del banco da lavoro possono produrre più di un oggetto singolo. Per far ciò, è possibile sfruttare l'operatore di moltiplicazione di IItemStack sull'oggetto prodotto.
ZenScript Copy// Aggiunta di una ricetta con forma
craftingTable.addShaped("esempio_con_forma_1", <item:minecraft:arrow>, [
[<item:minecraft:diamond>, <item:minecraft:diamond>],
[<item:minecraft:air>, <item:minecraft:flint>],
[<item:minecraft:air>, <item:minecraft:flint>]
]);
// Aggiunta di una ricetta con forma 2x2 (potrebbe anche essere resa riflessa)
craftingTable.addShaped("esempio_con_forma_1, <item:minecraft:diamond_axe>, [
[<item:minecraft:diamond>, <item:minecraft:diamond>],
[<item:minecraft:diamond>, <item:minecraft:stick>]
]);
// Aggiunta di una ricetta con forma riflessa
craftingTable.addShapedMirrored("esempio_con_forma_riflessa_1", <item:minecraft:arrow> * 2, [
[<item:minecraft:diamond>, <item:minecraft:diamond>],
[<item:minecraft:air>, <item:minecraft:flint>],
[<item:minecraft:air>, <item:minecraft:flint>]
]);
Fai riferimento a Usare le Funzioni Ricetta per alcuni esempi su come usare le funzioni ricetta.
Usare le Funzioni Ricetta
Link to usare-le-funzioni-ricetta
Una funzione ricetta permette di generare un prodotto programmaticamente. Questo può essere utile soprattutto quando è necessario usare delle informazioni riguardanti uno degli oggetti in input, come il suo livello di danno o altri dati NBT.
Siccome le ricette con forma e con forma riflessa sono molto simili, gli esempi riguarderanno solamente le prime. Ogni esempio che usa addShaped
può essere letto come se venisse usata addShapedMirrored
.
Usare RecipeFunctionArray in una Ricetta Informe
Link to usare-recipefunctionarray-in-una-ricetta-informe
funzioneRicetta
<RecipeFunctionArray>
(prodottoUsuale as IItemStack, ingredienti as IItemStack[]) => {};
prodottoUsuale
<IItemStack>ingredienti
<IItemStack[]> Array di ingredienti ordinati nello stesso modo definito nella ricetta originale.
ZenScript Copyimport crafttweaker.api.item.IItemStack;
craftingTable.addShapeless("esempio_informe_funzione_1", <item:minecraft:diamond> * 9, [<item:minecraft:dirt>, <item:minecraft:stick>], (solitoProdotto as IItemStack, ingredienti as IItemStack[]) => {
// Controlla se <item:minecraft:dirt> ha come nome "vero blocco di diamante"
if (inputs[0].displayName == "vero blocco di diamante") {
// Ritorna <item:minecraft:diamond> * 9
return solitoProdotto;
}
// Altrimenti ritorna<item:minecraft:clay> avente come nome "Diamante"
return <item:minecraft:clay>.setDisplayName("Diamante");
});
Usare RecipeFunctionMatrix in una Ricetta Con Forma (Riflessa)
Link to usare-recipefunctionmatrix-in-una-ricetta-con-forma-riflessa
funzioneRicetta
<RecipeFunctionMatrix>
(solitoProdotto as IItemStack, ingredienti as IItemStack[][]) => {};
prodottoUsuale
<IItemStack>ingredienti
<IItemStack[][]> Array di ingredienti ordinati nello stesso modo definito nella ricetta originale. Un ingrediente può essere trovato definendone prima la riga, poi la colonna (ingredienti[0][1]
, per esempio, identifica l'ingrediente nella prima riga, seconda colonna).
ZenScript Copyimport crafttweaker.api.item.IItemStack;
craftingTable.addShaped("esempio_con_forma_funzione_1", <item:minecraft:diamond_block>, [
[<item:minecraft:clay_ball>, <item:minecraft:clay_ball>, <item:minecraft:clay_ball>],
[<item:minecraft:clay_ball>, <item:minecraft:diamond>, <item:minecraft:clay_ball>],
[<item:minecraft:clay_ball>, <item:minecraft:clay_ball>, <item:minecraft:clay_ball>]
], (solitoProdotto as IItemStack, ingredienti as IItemStack[][]) => {
var contatore = 0;
// Controlla che tutte le <item:minecraft:clay_ball> abbiano come nome "Diamante"
for riga in ingredienti {
for oggetto in riga {
if (<item:minecraft:clay_ball>.matches(oggetto) && oggetto.displayName == "Diamante") {
// Se l'oggetto nella ricetta è <item:minecraft:clay_ball> e ha come nome "Diamante", incrementiamo il contatore
contatore++;
}
}
}
// Se ci sono 8 <item:minecraft:clay_ball> aventi come nome "Diamante"
if (contatore == 8) {
if (inputs[1][1].displayName == "Diamante Speciale") {
// Se<item:minecraft:diamond> ha come nome "Diamante Speciale"
// Ritorna 2 <item:minecraft:diamond_block>
return solitoProdotto * 2;
} else {
// Ritorna <item:minecraft:diamond_block>
return solitoProdotto;
}
}
// Altrimenti, ritorna <item:minecraft:clay> avente come nome "Blocco di Diamante"
return <item:minecraft:clay>.setDisplayName("Blocco di Diamante");
});
Uso Avanzato
Link to uso-avanzato
Funzioni come Variabili
Link to funzioni-come-variabili
Le funzioni ricetta possono essere assegnate ad una variabile, cosicché possano essere utilizzate facilmente in più ricette.
Informe:
ZenScript Copyimport crafttweaker.api.item.IItemStack;
var funzioneRicettaDiEsempioPerRicettaInforme as function(solitoProdotto as IItemStack, ingredienti as IItemStack[]) as IItemStack = (solitoProdotto, ingredienti) => {
if(ingredienti[0].displayName == "vero blocco di diamante"){
return solitoProdotto;
}
return <item:minecraft:clay>.setDisplayName("Diamante");
};
// ingredienti[0] per funzioneRicettaDiEsempioPerRicettaInforme sarà <item:minecraft:dirt>
craftingTable.addShapeless("esempio_funzione_ricetta_in_variabile_informe_1", <item:minecraft:diamond> * 9, [<item:minecraft:dirt>, <item:minecraft:stick>], funzioneRicettaDiEsempioPerRicettaInforme);
// ingredienti[0] per funzioneRicettaDiEsempioPerRicettaInforme sarà <item:minecraft:cobblestone>
craftingTable.addShapeless("esempio_funzione_ricetta_in_variabile_informe_2", <item:minecraft:diamond> * 9, [<item:minecraft:cobblestone>, <item:minecraft:dirt>], funzioneRicettaDiEsempioPerRicettaInforme);
Con forma (riflessa):
ZenScript Copyimport crafttweaker.api.item.IItemStack;
var funzioneRicettaDiEsempioPerRicettaConForma as function(solitoProdotto as IItemStack, ingredienti as IItemStack[][]) as IItemStack = (solitoProdotto as IItemStack, ingredienti as IItemStack[][]) => {
var contatore = 0;
// Controlla che tutte le <item:minecraft:clay_ball> abbiano come nome "Diamante"
for riga in ingredienti {
for oggetto in riga {
if (<item:minecraft:clay_ball>.matches(oggetto) && recipeItem.displayName == "Diamante") {
// Se l'oggetto nella ricetta è <item:minecraft:clay_ball> e ha come nome "Diamante", incrementiamo il contatore
contatore++;
}
}
}
// Se ci sono 8 <item:minecraft:clay_ball> aventi come nome "Diamante"
if (contatore == 8) {
if (inputs[1][1].displayName == "Diamante Speciale") {
// Se <item:minecraft:diamond> ha come nome "Diamante Speciale"
// Ritorna 2 <item:minecraft:diamond_block>
return solitoProdotto * 2;
} else {
// Ritorna <item:minecraft:diamond_block>
return solitoProdotto;
}
}
// Altrimenti, ritorna <item:minecraft:clay> avente come nome "Blocco di Diamante"
return <item:minecraft:clay>.setDisplayName("Blocco di Diamante");
};
craftingTable.addShaped("esempio_funzione_ricetta_in_variabile_con_forma_3", <item:minecraft:diamond_block>, [
[<item:minecraft:clay_ball>, <item:minecraft:clay_ball>, <item:minecraft:clay_ball>],
[<item:minecraft:clay_ball>, <item:minecraft:diamond>, <item:minecraft:clay_ball>],
[<item:minecraft:clay_ball>, <item:minecraft:clay_ball>, <item:minecraft:clay_ball>]
], funzioneRicettaDiEsempioPerRicettaConForma);
craftingTable.addShaped("esempio_funzione_ricetta_in_variabile_con_forma_4", <item:minecraft:diamond_block>, [
[<item:minecraft:clay_ball>, <item:minecraft:clay_ball>, <item:minecraft:clay_ball>],
[<item:minecraft:clay_ball>, <item:minecraft:diamond>, <item:minecraft:clay_ball>],
[<item:minecraft:clay_ball>, <item:minecraft:clay_ball>, <item:minecraft:clay_ball>]
], funzioneRicettaDiEsempioPerRicettaConForma);
Rimuovere una RIcetta
Link to rimuovere-una-ricetta
Rimuovere una Ricetta in base al Nome
Link to rimuovere-una-ricetta-in-base-al-nome
craftingTable.removeByName(nomeRicetta);
nomeRicetta
<string>
Rimuove la ricetta che ha come nome il valore dato.
ZenScript CopycraftingTable.removeByName("minecraft:sugar_from_sugar_cane");
Rimuovere Ricette in base al Prodotto
Link to rimuovere-ricette-in-base-al-prodotto
craftingTable.removeRecipe(prodotto);
prodotto
<IItemStack>
Rimuove tutte le ricette il cui prodotto è l'IItemStack dato.
ZenScript CopycraftingTable.removeRecipe(<item:minecraft:stick>);
Rimuovere Ricette in base all'ID Mod
Link to rimuovere-ricette-in-base-allid-mod
craftingTable.removeByModid(idMod);
idMod
<string>
Rimuove tutte le ricette aggiunte dalla mod data.
ZenScript CopycraftingTable.removeByModid("minecraft");
Escludere Ricette dalla Rimozione per ID Mod
Link to escludere-ricette-dalla-rimozione-per-id-mod
craftingTable.removeByModid(idMod, filtroEsclusione);
idMod
<string>filtroEsclusione
<RecipeFilter>nome
<string> Il nome della ricetta per un eventuale filtraggio. L'ID mod non è incluso
Rimuove tutte le ricette aggiunte dalla mod data. Le ricette vengono escluse se il risultato di filtroEsclusione è vero (true) in base al nome della ricetta.
ZenScript CopycraftingTable.removeByModid("minecraft", (nome) => {
// Controlla se il nome della ricetta corrisponde a "minecraft:red_bed_from_white_bed"
return nome == "red_bed_from_white_bed";
});
È possibile escludere più di una ricetta. Un modo di farlo è presentato nel seguente esempio:
ZenScript Copy// Un vettore di nomi di ricette rappresentati come stringhe
var esclusioniMinecraft as string[] = [
"acacia_slab",
"red_bed_from_white_bed",
"sugar_from_sugar_cane"
];
craftingTable.removeByModid("minecraft", (npme) => {
return nome in esclusioniMinecraft;
});
Rimuovere Ricette in base ad una Regex
Link to rimuovere-ricette-in-base-ad-una-regex
craftingTable.removeByRegex(regex);
regex
<string>
Rimuove tutte le ricette il cui nome può essere identificato dalla regex (espressione regolare) data.
ZenScript Copy// Rimuove ricette come "minecraft:green_carpet", "minecraft:lime_carpet_from_white_carpet", e "minecraft:white_carpet"
craftingTable.removeByRegex("minecraft:*_carpet");
Rimuovere Tutte le Ricette
Link to rimuovere-tutte-le-ricette
craftingTable.removeAll();
Rimuove tutte le ricette dal banco da lavoro.
ZenScript CopycraftingTable.removeAll();