Aller au contenu principal

Machine

Machines pilotées par les données pour les îles BTC Sky : recettes, réseau d'énergie, paliers, modules d'amélioration et hologrammes.

Privéesv0.1.1Économie et artisanat
NécessiteTypeWriter0.9.0-beta-177 (BTC build)Quest extensionRPG Bundle (RPG Core)BTC SkyBTCMobsGUI extension (GuiAndDialogs)CraftEnginefacultatifMiniPlaceholdersfacultatif

Conçue pour le réseau BornToCraft. Cette extension est documentée à titre de référence et n'est pas distribuée.

Vue d'ensemble​

Machine transforme la conception de machines en configuration. Une entrée Machine Definition décrit un type de machine : combien d'emplacements d'entrée, de sortie, de combustible et d'amélioration elle possède, ce qu'elle traite, ce qu'elle coûte en combustible et en énergie, son apparence, ce que dit son hologramme et combien d'exemplaires un joueur ou une île peut placer. L'extension lit la définition et fait fonctionner chaque exemplaire placé. Un fourneau, un broyeur, un générateur de cobblestone ou un broyeur de mobs est une entrée, pas du code.

Les machines appartiennent aux îles BTC Sky. Une machine ne peut être placée que sur l'île du joueur, est bornée par des limites par joueur et par île, et son palier est débloqué par l'arbre de recherche de l'île. L'énergie et les liquides sont partagés à l'échelle d'une dimension de l'île : les générateurs et les cellules forment une réserve, et chaque machine reliée de cette dimension y puise.

C'est une extension privée de la version BTC de TypeWriter (BTC Core, Paper ou Folia), documentée à titre de référence. L'exécution est compatible Folia : les emplacements sont mis en cache en mémoire et enregistrés de manière asynchrone.

Fonctionnalités​

  • Une entrée par machine — emplacements, recettes, combustible, énergie, visuels, hologramme, limites et automatisation se trouvent dans une seule Machine Definition.
  • 27 types de traitement — machines à recettes (fonte, broyage, sciage, mélange, brassage…), stockage, logistique, machines de zone, machines d'énergie, spawners, broyeurs et plus encore.
  • Recettes à entrées multiples et aléatoires — entrées et sorties supplémentaires, sorties basées sur des probabilités, entrées et sorties de liquides, objets du catalogue et potions vanilla.
  • Réseau d'énergie et réservoirs de liquides partagés — cellules, générateurs et réservoirs sont mis en commun par dimension d'île ; une machine peut être détachée du réseau.
  • Paliers et modules d'amélioration — paliers permanents débloqués par la recherche BTC Sky, plus des modules amovibles (vitesse, rendement, fortune, portée, filtre, capacité, combustible liquide) qui se cumulent avec eux.
  • Protection d'île et limites — placement sur sa propre île, flag de construction, plafonds par joueur, par île et par dimension.
  • Redstone et entonnoirs — mode redstone, éjection, sortie de comparateur et impulsions de fin, transferts par entonnoir.
  • Hologrammes — un texte d'état avec barre de progression au-dessus de chaque machine, entièrement formaté en MiniMessage.
  • Menu de tableau de bord — un menu qui liste chaque machine de la dimension avec son état, son énergie et l'état de son lien.
  • Persistance — les machines placées, leurs inventaires, leur énergie et leur progression sont enregistrés dans un Machine Data Artifact.

Installation​

  1. Installez TypeWriter avec la version BTC (BTC Core sur Paper ou Folia).
  2. Installez les extensions dont Machine dépend : Quest, RPGBundle (RPG Core), BTC Sky, BTCMobs et GuiAndDialogs (la couche GUI partagée).
  3. Facultatif : installez CraftEngine si une définition utilise le visuel FURNITURE ou CUSTOM_BLOCK, et MiniPlaceholders pour utiliser les placeholders.
  4. Placez le JAR de Machine dans plugins/Typewriter/extensions/ et redémarrez le serveur.
  5. La sortie de comparateur de redstone et les impulsions de fin ne fonctionnent que si BTC Core fournit l'émission de redstone.

Premiers pas​

Créez un fourneau qui fait fondre du minerai de fer en lingots :

  1. Dans le panel web TypeWriter, ouvrez une page static et ajoutez un Machine Data Artifact. Il stocke chaque machine placée. Ne modifiez pas son artifactId par la suite, sinon les machines enregistrées sont perdues.
  2. Sur la même page, ajoutez une Machine Definition. Donnez-lui un name, gardez processingType sur SMELTING.
  3. Définissez storageRef sur l'artefact de l'étape 1.
  4. Dans recipes, ajoutez une recette : inputMaterial IRON_ORE, outputMaterial IRON_INGOT, outputAmount 1, cookTime 200 (ticks, soit 10 secondes). Laissez fuelCost à 1 ou plus si la machine doit brûler du combustible.
  5. Dans fuelTypes, ajoutez COAL avec un burnTime et un fuelValue.
  6. Définissez spawnItem sur l'objet que les joueurs placent pour créer la machine. Une définition a besoin d'un spawnItem ou d'un vanillaBlock, sinon elle est rejetée à la publication.
  7. Facultatif : définissez perIslandLimit pour plafonner le nombre d'exemplaires par île.
  8. Publiez. Placez l'objet sur votre île : la machine apparaît avec son hologramme, et un clic droit ouvre son menu.
Convertir un bloc vanilla

vanillaBlock (par exemple BREWING_STAND) fait prendre en charge ce bloc vanilla par la définition : le placer crée la machine à la place. Les conversions de blocs vanilla ne sont pas concernées par l'avertissement de limite de placement, car un plafond plafonnerait aussi le bloc vanilla.

Fonctionnement​

Une machine est une définition (l'entrée) plus des instances (les exemplaires placés dans le monde). La définition ne change jamais à l'exécution ; chaque instance garde son propre inventaire, sa charge d'énergie et sa progression.

Le modèle de définition​

Chaque champ de Machine Definition appartient à l'un de ces groupes :

GroupeChampsCe qu'il contrôle
TypeprocessingType, behaviorsCe que fait la machine. behaviors est facultatif et déduit du type lorsqu'il est vide.
EmplacementsinputSlots, outputSlots, hasFuelSlot, upgradeSlots, essenceSlots, filterSlots, shearsSlots, maxPerSlotLa disposition de l'inventaire. La disposition d'une machine est limitée à 54 emplacements.
Recettes et combustiblerecipes, fuelTypesCe qui entre et ce qui sort, le temps nécessaire et ce que cela coûte.
Énergie et liquidesenergyCapacity, energyGenerationPerTick, liquidTankCapacity, liquidFuelNameContribution à la réserve et gestion des liquides.
Progressiontiers, allowedUpgrades, upgradeSpecsPaliers permanents et modules amovibles.
ApparencespawnItem, visualType, furnitureId, customBlockId, alignWithPlayerYaw, hologram*Objet, modèle et hologramme.
PlacementmachineLimit, perIslandLimit, islandLimitUpgradeKey, dimensionScope, vanillaBlockQui peut la placer, où et en combien d'exemplaires.
AutomatisationhopperInterval, hopperTransferAmount, redstoneMode, ejectWhenPowered, redstoneComparatorOutput, redstonePulseOnComplete, redstonePulseTicksEntonnoirs et redstone.
PersistancestorageRef, guiStorageRefOù les instances et le contenu STORAGE sont enregistrés.

Types de traitement​

FamilleTypes
Machines à recettes, pilotées par recipesSMELTING, LIQUID_SMELTING, MULTI_SMELTING, GRINDING, SAWING, MIXING, COMPACTING, ENRICHING, RECYCLING, BREWING, AUTO_CRAFTING, INDUSTRIAL, GENERIC
ProductionGENERATOR (aucune entrée : produit les sorties de la recette au fil du temps, coût d'énergie facultatif)
Stockage et logistiqueSTORAGE, SORTING (chaque emplacement de filtre réclame une face), CONVEYOR (tapis directionnel)
Machines de zoneVACUUM (vacuumRange), SHEARING (shearRange, shearInterval, shearsSlots)
ÉnergieENERGY_CELL, ENERGY_GENERATOR, CHARGING (chargeables, chargeRatePerSecond)
EntitésASSEMBLER (assemblerMode SPAWN ou COLLECT, assemblerEntityType, assemblerMobId, assemblerIngredients, assemblerEnergyCost, assemblerInterval, assemblerRange, spawnerUpgrades), MOB_GRINDING (champs grinder*), EXPERIENCE_TANK (experienceCapacity)
SpécialCONTROL_PANEL (exécute panelOpenCommand / panelAltCommand, ne peut pas être ramassé), TRANSMUTATION (déplace l'enchantement le plus élevé d'un objet vers un livre contre des fioles d'expérience)

SMELTING et AUTO_CRAFTING se rabattent sur les recettes vanilla lorsqu'aucune recette n'est déclarée. Toutes les autres machines à recettes sans aucune recette acceptent des objets et restent inactives indéfiniment ; l'extension journalise un avertissement à la publication.

Énergie et liquides​

L'énergie est stockée dans les machines ENERGY_CELL. La réserve de la dimension d'île est la somme de ses cellules reliées. Les machines ENERGY_GENERATOR l'alimentent, et les consommateurs y puisent. Une machine rejoint le réseau de sa dimension dès qu'elle est placée ; le bouton Machine Link (ou le tableau de bord) l'en retire puis l'y remet. Une cellule de l'Overworld n'alimente jamais une machine du Nether.

Les réservoirs de liquides fonctionnent de la même manière : une machine reliée atteint chaque réservoir de sa dimension, une machine détachée ne voit que le sien. Une recette consomme ou produit des liquides avec liquidInputName/liquidInputAmount et liquidOutputName/liquidOutputAmount.

Paliers et modules d'amélioration​

  • Un palier (tiers) est permanent. Chaque palier nomme le nœud de recherche BTC Sky (researchNode) qui le débloque et définit des multiplicateurs de vitesse, de rendement et d'énergie, une chance de fortune et des emplacements supplémentaires. Listez les paliers par ordre croissant : le plus élevé débloqué s'applique à chaque exemplaire de la machine sur l'île. Un palier avec un researchNode vide est rejeté.
  • Un module d'amélioration (upgradeSpecs) est un objet placé dans un emplacement d'amélioration. itemId est l'identifiant d'objet BTC (recommandé), material est une solution de repli. Son type (SPEED, YIELD, ENERGY_EFFICIENCY, FORTUNE, RANGE, FILTER, CAPACITY, LIQUID_FUEL) ne compte que s'il est listé dans allowedUpgrades.
  • Le palier et les modules se multiplient entre eux.

Machine Menu est une GUI construite à partir des dispositions de l'extension GUI partagée (layoutPool, mainLayoutId, inventoryRows). Les objets de la disposition dont le buttonType est un bouton Machine sont remplis avec des données en direct :

Type de boutonEffet
MACHINE_OPEN, MACHINE_SMELT, MACHINE_COLLECT, MACHINE_STATUS, MACHINE_FUELActions standard de la machine et affichage de l'état.
MACHINE_LINKRelie la machine au réseau de sa dimension, ou l'en détache.
MACHINE_PICKUPRetire la machine ouverte et la rend sous forme d'objet.
NAV_BACK, NAV_CLOSERetour ou fermeture.
MACHINE_GRID_INFORésumé de la dimension : nombre de machines, énergie stockée, capacité, produite, consommée et bilan.
MACHINE_ENTRYUne machine de la dimension par emplacement marqué. Un clic gauche bascule son hologramme, un clic droit bascule son lien au réseau.
MACHINE_LIST_ARROWFlèche de défilement de la liste des machines, avec le compteur de pages.

Deux autres entrées complètent l'ensemble. Open Machine GUI relie une définition à un titre et une taille de menu, mais son action ne fait rien lorsqu'elle est déclenchée dans le code actuel : les machines ouvrent leur menu au clic droit. Machine Position Variable renvoie la position de la propre machine du spectateur pour une définition donnée dans sa dimension : une seule entrée de PNJ peut donc suivre la machine de chaque île.

Les libellés affichés par le tableau de bord (états, lien, hologramme) proviennent de Machine Dashboard Wording. Le défilement et la commande d'ouverture proviennent de Machine Dashboard Command.

Commandes​

CommandeDescription
/typewriter machine giveListe chaque machine enregistrée.
/typewriter machine give <machine>Vous donne l'objet d'une machine, par identifiant ou par partie de son nom (les accents et la casse sont ignorés).
/typewriter machine liquideAffiche les liquides contenus dans la machine que vous regardez (à moins de 6 blocs).
/typewriter machine liquide <liquid> <millibuckets>Verse un liquide dans la machine ciblée. Un outil de test : aucun geste de joueur ne remplit un réservoir.

L'arbre /machine est enregistré sous la commande TypeWriter : il se saisit donc /typewriter machine … (alias /tw machine …). Il nécessite entièrement machine.admin. Les entrées peuvent enregistrer d'autres commandes, en tant que commandes de premier niveau :

CommandeDescription
/<commandName> scroll <delta>, resetFait défiler la liste du tableau de bord, ou la rembobine. Nom par défaut machines.
/<commandName> dashboardOuvre le menu nommé dans dashboardMenuId.
/<commandName> link <instanceId>, hologram <instanceId>Bascule le lien au réseau ou l'hologramme d'une machine. Utilisé par les emplacements du tableau de bord.
/<commandName> de Machine Test CommandDéclenche ses triggers, si les criteria correspondent. Nom par défaut machine-test.
/<commandName>, clear, bench de Machine Test Platform CommandConstruisent une vitrine de machines là où vous vous trouvez, la suppriment, ou provisionnent des mondes loadbench_*. Nom par défaut machine-test-platform.

Permissions​

PermissionAutorise
machine.adminLes commandes /typewriter machine.
machine.protection.bypassPlacer, casser et interagir avec les machines n'importe où, en ignorant la propriété de l'île, le flag de construction et les limites.

Placeholders​

Balises MiniPlaceholders de l'extension machine, fournies via TypeWriter. <instance> est l'identifiant d'une machine placée, <slot> l'index logique de l'emplacement (0 par défaut).

PlaceholderRenvoie
<machine_input:instance:slot>true si l'emplacement d'entrée contient un objet.
<machine_input_name:instance:slot>Nom du matériau de l'objet d'entrée.
<machine_input_amount:instance:slot>Quantité dans l'emplacement d'entrée.
<machine_output:instance:slot>true si l'emplacement de sortie contient un objet.
<machine_output_name:instance:slot>Nom du matériau de l'objet de sortie.
<machine_output_amount:instance:slot>Quantité dans l'emplacement de sortie.
<machine_tier:instance>Nom du palier actif.
<machine_dimension>Nom lisible de la dimension dans laquelle se trouve le joueur.
<machine_grid_count>, <machine_grid_active>, <machine_grid_stalled>Machines dans la dimension, actives, et bloquées.
<machine_energy_stored>, <machine_energy_capacity>Énergie stockée et capacité totale de la dimension.
<machine_energy_produced>, <machine_energy_consumed>, <machine_energy_balance>Énergie par seconde produite, consommée et nette.

Les placeholders de joueur renvoient une valeur vide sans joueur (console).

Les messages d'hologramme acceptent %machine%, %tier%, %energy%, %bar%, %percent% et %time_left%.

Entrées​

10 entrées, générées depuis la source de l'extension.

Actions2
Commandes3
Variables1
Artefacts1
Manifestes2
Autres entrées1

Dépannage​

La définition est rejetée à la publication. Consultez le journal du serveur : no way to obtain this machine signifie que ni spawnItem ni vanillaBlock n'est défini ; tier[n].researchNode is blank signifie qu'un palier n'a pas de nœud de recherche ; the machine layout needs N slots, maximum is 54 signifie qu'il y a trop d'emplacements.

Une machine accepte des objets et ne fonctionne jamais. Une machine à recettes (par exemple MIXING, GRINDING, BREWING) avec une liste recipes vide n'a pas de repli vanilla. Seuls SMELTING et AUTO_CRAFTING utilisent les recettes vanilla.

Le placement est refusé. Les messages proviennent de Machine Protection Config : la machine doit se trouver sur votre propre île BTC Sky, vous avez besoin du flag de construction, et les limites par joueur, par île et par dimension ainsi que dimensionScope s'appliquent. Un CONTROL_PANEL a besoin d'un cristal de stabilisation dans la dimension. Le staff avec machine.protection.bypass ignore toutes les vérifications.

La machine indique qu'elle n'est pas reliée ou n'a pas d'énergie. Elle a besoin de machines ENERGY_CELL et ENERGY_GENERATOR dans la même dimension, et elle doit être reliée (utilisez le bouton de lien). La réserve ne traverse jamais les dimensions.

Un module d'amélioration ne change rien. Son type doit figurer dans allowedUpgrades, et CAPACITY ne fonctionne que sur STORAGE, EXPERIENCE_TANK et ENERGY_CELL. LIQUID_FUEL nécessite un liquidFuelName.

Un palier n'est jamais appliqué. Le researchNode doit correspondre à un identifiant de nœud de recherche de BTC Sky, et l'île doit l'avoir débloqué.

Le menu s'ouvre vide ou ne s'ouvre pas. Vérifiez mainLayoutId par rapport aux identifiants de layoutPool ; le journal nomme les identifiants du pool lorsqu'ils ne correspondent pas.

Les visuels de meuble ou de bloc personnalisé échouent. FURNITURE et CUSTOM_BLOCK nécessitent CraftEngine et un furnitureId ou customBlockId existant.

Extensions associées​

  • BTC Sky — îles, propriété, recherche et dimensions dont dépendent les machines.