Files and loadingDateien und Laden
src/main/resources/data/<namespace>/propwash_parts/<category>/<path>.json
- Categories are the folder names:
frame,stack,motor,prop,video,battery,accessory,chemistry. Sub-folders and other folder names are errors.Kategorien sind die Ordnernamen:frame,stack,motor,prop,video,battery,accessory,chemistry. Unterordner und andere Ordnernamen sind Fehler. - The id is
<namespace>:<file name without .json>; the path may only contain[a-z0-9_.-]and must be unique across all categories.Die Id ist<namensraum>:<dateiname ohne .json>; der Pfad darf nur[a-z0-9_.-]enthalten und muss über alle Kategorien eindeutig sein. - Files are loaded only by
PropwashApi.parts().loadBundled(modId)from the add-on’s own jar, in the order chemistry → frame → stack → motor → prop → video → battery → accessory, alphabetically within a folder. Not from world data packs, no/reload.Geladen werden die Dateien nur vonPropwashApi.parts().loadBundled(modId)aus dem eigenen Jar des Add-ons, in der Reihenfolge chemistry → frame → stack → motor → prop → video → battery → accessory, innerhalb eines Ordners alphabetisch. Nicht aus Welt-Datenpaketen, kein/reload. - Propwash’s own 38 built-in parts and chemistries are files in exactly this format.Propwashs eigene 38 eingebaute Teile und Zellchemien sind Dateien in genau diesem Format.
ConventionsKonventionen
- Ids without a namespace (
"m22","lipo") meanpropwash:…. Always write other namespaces in full.Ids ohne Namensraum ("m22","lipo") meinenpropwash:…. Andere Namensräume immer voll schreiben. - Numbers are JSON numbers; integers must not have decimals (
"kv": 1750, not1750.5).Zahlen sind JSON-Zahlen; ganze Zahlen dürfen keine Nachkommastellen haben ("kv": 1750, nicht1750.5). [min, max]ranges may also be a single number forcells("cells": 6=[6, 6]).[min, max]-Bereiche dürfen beicellsauch eine einzelne Zahl sein ("cells": 6=[6, 6]).- Positions are
[x, y, z]in millimetres: origin in the middle of the frame at the height of the stack plate, +X right, +Y up, −Z forward.Positionen sind[x, y, z]in Millimetern: Ursprung in der Rahmenmitte auf Höhe der Stack-Auflage, +X rechts, +Y oben, −Z vorn. "format": 1is optional. New optional fields can come with minor API versions; the format number only rises for incompatible changes."format": 1ist optional. Neue optionale Felder können mit Nebenversionen der API kommen; die Formatnummer steigt nur bei inkompatiblen Änderungen.
Fields of every partFelder jedes Teils
| FieldFeld | TypeTyp | DefaultStandard | MeaningBedeutung |
|---|---|---|---|
format | integerganze Zahl | 1 | File format. Optional; a higher number than this Propwash knows stops loading with “update Propwash”.Dateiformat. Optional; eine höhere Nummer, als dieses Propwash kennt, bricht das Laden mit „Propwash aktualisieren“ ab. |
mass_g | numberZahl | requiredPflicht | Mass in grams, above 0 and at most 20000.Masse in Gramm, über 0 und höchstens 20000. |
stack_size | integerganze Zahl | 0 = by category (props 64, others 16)0 = je Kategorie (Props 64, sonst 16) | Item stack size, 1–99.Stapelgröße des Items, 1–99. |
sort | integerganze Zahl | 1000 | Order in lists and the creative tab.Reihenfolge in Listen und im Kreativ-Tab. |
creative | booleanbool | true | Listed in the add-on’s creative tab.Im Kreativ-Tab des Add-ons gelistet. |
durability | numberZahl | 1.0 (props: material)1,0 (Props: Material) | Divides the wear a crash causes; 2.0 wears half as fast.Teilt die Abnutzung durch einen Absturz; 2,0 nutzt halb so schnell ab. |
recycle | "none" or object"none" oder Objekt | by categoryje Kategorie | What the salvage slot gives for a broken part.Was das Zerlegen-Feld für ein kaputtes Teil gibt. |
recycle.item | idId | requiredPflicht | Item id, for example propwash:copper_coil.Item-Id, zum Beispiel propwash:copper_coil. |
recycle.count | integerganze Zahl | 1 | How many.Wie viele. |
rarity | textText | – | Colour of the item name: common, uncommon, rare, epic.Farbe des Item-Namens: common, uncommon, rare, epic. |
visual | objectObjekt | – | Look of the part.Aussehen des Teils. |
visual.accent | "#rrggbb" | – | Accent colour (battery wrap, procedural shape).Akzentfarbe (Akkuhülle, prozedurale Form). |
visual.render_model | idId | – | Use another drone model, for example a built-in one.Ein anderes Drohnen-Modell benutzen, zum Beispiel ein eingebautes. |
Frame frameRahmen frame
Folder propwash_parts/frame/, plus the fields of every part.
Ordner propwash_parts/frame/, dazu die Felder jedes Teils.
| FieldFeld | TypeTyp | DefaultStandard | MeaningBedeutung |
|---|---|---|---|
role | textText | freestyle | Frame class: whoop, toothpick, cinewhoop, freestyle, race, long_range, cinelifter, x_class.Rahmenklasse: whoop, toothpick, cinewhoop, freestyle, race, long_range, cinelifter, x_class. |
shape | textText | true_x | Shape: true_x, stretched_x, squashed_x, deadcat, h_frame, custom.Form: true_x, stretched_x, squashed_x, deadcat, h_frame, custom. |
wheelbase_mm | integerganze Zahl | requiredPflicht | Diagonal motor-to-motor distance, 20–2000.Diagonaler Abstand Motor zu Motor, 20–2000. |
max_prop_mm | integerganze Zahl | one of twoeins von zwei | Largest prop diameter, at most 400. Either this or props_mm.Größter Prop-Durchmesser, höchstens 400. Entweder das oder props_mm. |
props_mm | [min, max] | one of twoeins von zwei | Smallest and largest prop diameter, instead of max_prop_mm.Kleinster und größter Prop-Durchmesser, statt max_prop_mm. |
motor_mounts | list of idsListe von Ids | requiredPflicht | Motor mounts the frame takes (one id is also fine).Motor-Halterungen, die der Rahmen nimmt (eine einzelne Id geht auch). |
stack_mounts | list of idsListe von Ids | requiredPflicht | Stack mounts the frame takes.Stack-Halterungen, die der Rahmen nimmt. |
accessory_mounts | listListe | emptyleer | Accessory mounts: top, bottom, front.Zubehör-Halterungen: top, bottom, front. |
arms | objectObjekt | true X from the wheelbaseTrue-X aus dem Radstand | Own arm geometry with the keys front_left, front_right, rear_left, rear_right.Eigene Arm-Geometrie mit den Schlüsseln front_left, front_right, rear_left, rear_right. |
arms.<arm>.pos | [x, y, z] mm | requiredPflicht | Motor position.Motorposition. |
arms.<arm>.spin | textText | props inProps nach innen | Spin direction: cw, ccw.Drehrichtung: cw, ccw. |
battery | objectObjekt | – | Where the battery sits.Wo der Akku sitzt. |
battery.on_top | booleanbool | wheelbase ≥ 100Radstand ≥ 100 | Battery on top of the frame.Akku oben auf dem Rahmen. |
battery.plate_mm | numberZahl | on top 0.13 × wheelbase, below −0.05 × wheelbaseoben 0,13 × Radstand, unten −0,05 × Radstand | Height of the battery plate.Höhe der Akku-Auflage. |
electronics_mm | numberZahl | 0.05 × wheelbase0,05 × Radstand | Height of the electronics.Höhe der Elektronik. |
camera | objectObjekt | – | FPV camera. Every frame should set the position.FPV-Kamera. Jeder Rahmen sollte die Position setzen. |
camera.pos | [x, y, z] mm | 15 mm above the centre of mass15 mm über dem Schwerpunkt | Lens position; decides how much of the props shows in the FPV picture.Objektivlage; bestimmt, wie viel von den Props im FPV-Bild zu sehen ist. |
camera.tilt_deg | numberZahl | 20 | Default camera angle, 0–80°.Standard-Kamerawinkel, 0–80°. |
center_of_mass_mm | [x, y, z] mm | [0, 0, 0] | Centre of mass of the frame.Schwerpunkt des Rahmens. |
mass_split | objectObjekt | open 0.6 / 0.4 / 0, ducted 0.2 / 0.3 / 0.5offen 0,6 / 0,4 / 0, geduckt 0,2 / 0,3 / 0,5 | How the mass divides; the parts add up to 1.Wie sich die Masse verteilt; die Anteile ergeben zusammen 1. |
mass_split.arms | numberZahl | requiredPflicht | Share of the arms.Anteil der Arme. |
mass_split.plate | numberZahl | requiredPflicht | Share of the plate.Anteil der Platte. |
mass_split.duct | numberZahl | 0 | Share of the duct.Anteil des Ducts. |
accessory_anchors | objectObjekt | formula from the frameFormel aus dem Rahmen | Where accessories sit, per mount (top, bottom, front).Wo Zubehör sitzt, je Halterung (top, bottom, front). |
accessory_anchors.<slot>.pos | [x, y, z] mm | requiredPflicht | Position. |
accessory_anchors.<slot>.tilt_deg | numberZahl | 0 | Tilt.Neigung. |
accessory_anchors.<slot>.length_mm | numberZahl | 0 | Length of the mount.Länge der Halterung. |
aero | objectObjekt | requiredPflicht | Aerodynamics.Aerodynamik. |
aero.frontal_area_m2 | numberZahl | requiredPflicht | Frontal area in m².Stirnfläche in m². |
aero.drag_coefficient | numberZahl | requiredPflicht | Drag coefficient.Widerstandsbeiwert. |
aero.side_area_m2 | numberZahl | from the frontal areaaus der Stirnfläche | Side area.Seitenfläche. |
aero.top_area_m2 | numberZahl | from the frontal areaaus der Stirnfläche | Top area.Draufsichtfläche. |
duct | true or objecttrue oder Objekt | open propsoffene Props | Ducted frame. true or {} uses the standard duct; single values below override it.Geduckter Rahmen. true oder {} nimmt den Standard-Duct; einzelne Werte darunter überschreiben ihn. |
duct.thrust_gain | numberZahl | standardStandard | Extra static thrust of the duct.Zusätzlicher Standschub des Ducts. |
duct.clearance_mm | numberZahl | standardStandard | Gap between blade tip and duct.Spalt zwischen Blattspitze und Duct. |
duct.translational_lift_gain | numberZahl | standardStandard | Lift gain in forward flight.Auftriebsgewinn im Vorwärtsflug. |
duct.wash_loss | numberZahl | standardStandard | Thrust lost in the own downwash.Schubverlust im eigenen Abwind. |
duct.wash_noise | numberZahl | standardStandard | Shaking in the own downwash.Rütteln im eigenen Abwind. |
duct.restitution | numberZahl | standardStandard | Bounce on impact.Abprallen beim Aufprall. |
duct.friction | numberZahl | standardStandard | Friction when touching blocks.Reibung an Blöcken. |
impact_tolerance | numberZahl | 8.08,0 | Impact speed in m/s that counts as a crash, above 0 and at most 100.Aufprallgeschwindigkeit in m/s, ab der ein Absturz zählt, über 0 und höchstens 100. |
battery_fit | objectObjekt | requiredPflicht | Which batteries fit.Welche Akkus passen. |
battery_fit.cells | [min, max] | requiredPflicht | Cell range (a single number means exactly that many).Zellbereich (eine einzelne Zahl heißt genau so viele). |
battery_fit.max_mass_g | numberZahl | requiredPflicht | Heaviest battery.Schwerster Akku. |
battery_fit.preferred_min_cells | integerganze Zahl | smallest cell countkleinste Zellzahl | Cells of the preferred battery (shown in the workbench).Zellen des bevorzugten Akkus (Anzeige in der Werkbank). |
battery_fit.preferred_min_capacity_mah | integerganze Zahl | 0 | Capacity of the preferred battery.Kapazität des bevorzugten Akkus. |
propwash:freestyle_5eingebaut: propwash:freestyle_5{
"format": 1,
"mass_g": 125.0,
"role": "freestyle",
"shape": "true_x",
"wheelbase_mm": 225,
"max_prop_mm": 130,
"motor_mounts": ["propwash:m22"],
"stack_mounts": ["propwash:s30"],
"accessory_mounts": ["top", "bottom", "front"],
"battery": {"on_top": true, "plate_mm": 30.0},
"electronics_mm": 12.0,
"camera": {"pos": [0.0, 17.2, -58.8], "tilt_deg": 28.0},
"accessory_anchors": {
"top": {"pos": [0.0, 34.7, -69.0], "tilt_deg": 22.0, "length_mm": 0.0},
"bottom": {"pos": [0.0, -3.0, -56.0], "tilt_deg": 30.0, "length_mm": 34.0},
"front": {"pos": [0.0, 0.0, -72.0], "tilt_deg": 0.0, "length_mm": 0.0}
},
"aero": {"frontal_area_m2": 0.012, "drag_coefficient": 0.9},
"impact_tolerance": 8.0,
"battery_fit": {"cells": [4, 6], "max_mass_g": 230.0, "preferred_min_cells": 6, "preferred_min_capacity_mah": 0},
"sort": 2
}
Stack (flight controller and ESC) stackStack (Flight-Controller und ESC) stack
Folder propwash_parts/stack/, plus the fields of every part.
Ordner propwash_parts/stack/, dazu die Felder jedes Teils.
| FieldFeld | TypeTyp | DefaultStandard | MeaningBedeutung |
|---|---|---|---|
mount | idId | requiredPflicht | Stack mount, for example propwash:whoop_aio, propwash:s20, propwash:s30.Stack-Halterung, zum Beispiel propwash:whoop_aio, propwash:s20, propwash:s30. |
esc_continuous_a | numberZahl | requiredPflicht | Continuous ESC current in A, at most 500.Dauerstrom des ESC in A, höchstens 500. |
cells | [min, max] | requiredPflicht | Cell range, 1–16.Zellbereich, 1–16. |
all_in_one | booleanbool | false | Flight controller and ESC on one board.Flight-Controller und ESC auf einer Platine. |
esc_burst_a | numberZahl | derivedabgeleitet | Burst current, at least the continuous current.Spitzenstrom, mindestens der Dauerstrom. |
esc_resistance_ohm | numberZahl | derivedabgeleitet | ESC resistance.Widerstand des ESC. |
brownout_v | numberZahl | derivedabgeleitet | Voltage at which the flight controller resets.Spannung, bei der der Flight-Controller neu startet. |
board_size_mm | numberZahl | derivedabgeleitet | Board size, 10–120.Platinengröße, 10–120. |
propwash:stack_30eingebaut: propwash:stack_30{
"format": 1,
"mass_g": 18.0,
"mount": "propwash:s30",
"esc_continuous_a": 55.0,
"cells": [3, 6],
"all_in_one": false,
"sort": 2
}
Motor motor
Folder propwash_parts/motor/, plus the fields of every part.
Ordner propwash_parts/motor/, dazu die Felder jedes Teils.
| FieldFeld | TypeTyp | DefaultStandard | MeaningBedeutung |
|---|---|---|---|
stator | textText | requiredPflicht | Stator label such as "2207" or "2306.5".Stator-Bezeichnung wie "2207" oder "2306.5". |
stator_mm | [d, h] | from statoraus stator | Stator diameter and height when the label does not say it (first two digits diameter, rest height).Statordurchmesser und -höhe, wenn die Bezeichnung es nicht sagt (erste zwei Ziffern Durchmesser, Rest Höhe). |
kv | integerganze Zahl | requiredPflicht | KV, 50–100000. |
mount | idId | requiredPflicht | Motor mount, for example propwash:m08, propwash:m14, propwash:m22, propwash:m28.Motor-Halterung, zum Beispiel propwash:m08, propwash:m14, propwash:m22, propwash:m28. |
max_current_a | numberZahl | requiredPflicht | Maximum current in A, at most 500.Höchststrom in A, höchstens 500. |
resistance_ohm | numberZahl | requiredPflicht | Winding resistance, below 10.Wicklungswiderstand, unter 10. |
cells | [min, max] | requiredPflicht | Cell range, 1–16.Zellbereich, 1–16. |
prop_mount | idId | propwash:universal | Prop mount; universal fits every prop.Prop-Aufnahme; universal passt zu jedem Prop. |
thermal | objectObjekt | defaults belowStandards darunter | Heat model.Hitzemodell. |
thermal.heat_capacity_j_per_k | numberZahl | from the massaus der Masse | Heat capacity in J/K.Wärmekapazität in J/K. |
thermal.cooling_w_per_k | numberZahl | from the massaus der Masse | Cooling at standstill in W/K.Kühlung im Stand in W/K. |
thermal.cooling_w_per_k_per_rad_s | numberZahl | from the massaus der Masse | Extra cooling per rad/s of rotation.Zusätzliche Kühlung je rad/s Drehzahl. |
thermal.derate_start_c | numberZahl | 130 | Throttling starts at this temperature in °C (from 40).Ab dieser Temperatur in °C wird gedrosselt (ab 40). |
thermal.max_temp_c | numberZahl | 150 | Maximum temperature in °C (at most 300).Höchsttemperatur in °C (höchstens 300). |
thermal.wear_per_s_at_max | numberZahl | 0.0020,002 | Wear per second at the maximum temperature, 0–1.Verschleiß je Sekunde bei Höchsttemperatur, 0–1. |
propwash:m2207_1750eingebaut: propwash:m2207_1750{
"format": 1,
"mass_g": 33.0,
"stator": "2207",
"kv": 1750,
"mount": "propwash:m22",
"max_current_a": 45.0,
"resistance_ohm": 0.055,
"cells": [6, 6],
"sort": 3,
"visual": {"accent": "#e8b622"}
}
Propeller prop
Folder propwash_parts/prop/, plus the fields of every part.
Ordner propwash_parts/prop/, dazu die Felder jedes Teils.
| FieldFeld | TypeTyp | DefaultStandard | MeaningBedeutung |
|---|---|---|---|
diameter_mm | integerganze Zahl | requiredPflicht | Diameter, 10–400.Durchmesser, 10–400. |
pitch_in | numberZahl | requiredPflicht | Pitch in inches, above 0 and at most 12.Steigung in Zoll, über 0 und höchstens 12. |
blades | integerganze Zahl | requiredPflicht | Number of blades, 2–8.Blattzahl, 2–8. |
ct | numberZahl | requiredPflicht | Thrust coefficient, between 0 and 1.Schubbeiwert, zwischen 0 und 1. |
cp | numberZahl | requiredPflicht | Power coefficient, between 0 and 1.Leistungsbeiwert, zwischen 0 und 1. |
material | textText | polycarbonate | Material: polycarbonate, glass_fiber_nylon, carbon_fiber_nylon, carbon. Sets the default stiffness and durability.Material: polycarbonate, glass_fiber_nylon, carbon_fiber_nylon, carbon. Bestimmt Standard-Steifigkeit und -Haltbarkeit. |
stiffness | numberZahl | by materialje Material | Stiffness, above 0 and at most 10; stiffer props shake less in the downwash.Steifigkeit, über 0 und höchstens 10; steifere Props rütteln weniger im Abwind. |
mount | idId | propwash:universal | Prop mount.Prop-Aufnahme. |
reverse_thrust | numberZahl | 0.55 (normal prop)0,55 (normaler Prop) | Thrust when the motor spins backwards in 3D mode, as a share of the forward thrust at the same speed, 0.2 to 1.0. Normal cambered props manage about half; symmetric 3D props give about 1.0.Schub, wenn der Motor im 3D-Modus rückwärts dreht, als Anteil des Vorwärtsschubs bei gleicher Drehzahl, 0,2 bis 1,0. Normale, gewölbte Props schaffen etwa die Hälfte; symmetrische 3D-Props geben etwa 1,0 an. |
propwash:p51_3beingebaut: propwash:p51_3b{
"format": 1,
"mass_g": 4.3,
"diameter_mm": 130,
"pitch_in": 4.6,
"blades": 3,
"ct": 0.12,
"cp": 0.06,
"material": "polycarbonate",
"sort": 3,
"visual": {"accent": "#ff7a1a"}
}
Video unit videoVideomodul video
Folder propwash_parts/video/, plus the fields of every part.
Ordner propwash_parts/video/, dazu die Felder jedes Teils.
| FieldFeld | TypeTyp | DefaultStandard | MeaningBedeutung |
|---|---|---|---|
link | textText | requiredPflicht | Video system: analog, digital.Videosystem: analog, digital. |
latency_ms | integerganze Zahl | requiredPflicht | Latency in ms, 1–500.Latenz in ms, 1–500. |
range_blocks | integerganze Zahl | requiredPflicht | Range in blocks, 16–20000.Reichweite in Blöcken, 16–20000. |
image_quality | numberZahl | requiredPflicht | Image quality, above 0 and at most 1.Bildqualität, über 0 und höchstens 1. |
camera_width_mm | numberZahl | 19 | Camera width, 8–40.Kamerabreite, 8–40. |
camera_fov_deg | numberZahl | analog 120, digital 130 | Horizontal field of view of the camera, 60–180; it is the FPV field of view in the game.Horizontales Sichtfeld der Kamera, 60–180; es ist das FPV-Sichtfeld im Spiel. |
vtx_power_mw | integerganze Zahl | 0 (= 200 mW) | Rated transmitter power in mW, 0–10000: the level a drone transmits at until the pilot picks another one; range and power draw are given for it (since API 1.6, before information only).Nennleistung des Senders in mW, 0–10000: die Stufe, mit der eine Drohne sendet, bis der Pilot eine andere wählt; Reichweite und Leistungsaufnahme gelten für sie (seit API 1.6, vorher nur Information). |
vtx_levels_mw | list of integersListe ganzer Zahlen | derived from vtx_power_mwaus vtx_power_mw abgeleitet | Selectable power levels in mW, ascending, 1–10000, at most 8, must contain vtx_power_mw, e.g. [25, 200, 400, 800]. Without the list Propwash derives levels up to the rated power (API 1.6).Wählbare Leistungsstufen in mW, aufsteigend, 1–10000, höchstens 8, muss vtx_power_mw enthalten, z. B. [25, 200, 400, 800]. Ohne Liste leitet Propwash Stufen bis zur Nennleistung ab (API 1.6). |
power_w | numberZahl | from system, mass and poweraus System, Masse und Leistung | Power draw of the video system in W for the energy balance, 0.1–60.Leistungsaufnahme des Videosystems in W für die Energiebilanz, 0,1–60. |
propwash:analog_raceeingebaut: propwash:analog_race{
"format": 1,
"mass_g": 8.0,
"link": "analog",
"latency_ms": 12,
"range_blocks": 380,
"image_quality": 0.65,
"camera_width_mm": 19.0,
"camera_fov_deg": 125.0,
"vtx_power_mw": 400,
"vtx_levels_mw": [25, 200, 400, 800, 1600],
"power_w": 3.5,
"sort": 1
}
Battery batteryAkku battery
Folder propwash_parts/battery/, plus the fields of every part.
Ordner propwash_parts/battery/, dazu die Felder jedes Teils.
| FieldFeld | TypeTyp | DefaultStandard | MeaningBedeutung |
|---|---|---|---|
cells | integerganze Zahl | requiredPflicht | Cells in series, 1–12.Zellen in Reihe, 1–12. |
capacity_mah | integerganze Zahl | requiredPflicht | Capacity in mAh, 50–50000.Kapazität in mAh, 50–50000. |
cell_resistance_ohm | numberZahl | requiredPflicht | Internal resistance per cell, below 1.Innenwiderstand je Zelle, unter 1. |
c_rating | integerganze Zahl | requiredPflicht | C rating, 1–300.C-Rate, 1–300. |
chemistry | idId | propwash:lipo | Cell chemistry: propwash:lihv, propwash:lion, propwash:lipo or an own one.Zellchemie: propwash:lihv, propwash:lion, propwash:lipo oder eine eigene. |
pack_mm | [l, w, h][l, b, h] | from mass and densityaus Masse und Dichte | Pack size.Maße des Akkus. |
connector | textText | emptyleer | Connector name, up to 16 characters.Steckername, bis 16 Zeichen. |
propwash:b6s_1300eingebaut: propwash:b6s_1300{
"format": 1,
"mass_g": 210.0,
"cells": 6,
"capacity_mah": 1300,
"cell_resistance_ohm": 0.0055,
"c_rating": 120,
"chemistry": "propwash:lipo",
"sort": 3,
"visual": {"accent": "#2f6fd6"}
}
Accessory accessoryZubehör accessory
Folder propwash_parts/accessory/, plus the fields of every part.
Ordner propwash_parts/accessory/, dazu die Felder jedes Teils.
| FieldFeld | TypeTyp | DefaultStandard | MeaningBedeutung |
|---|---|---|---|
slot | textText | requiredPflicht | Mount: top, bottom, front.Halterung: top, bottom, front. |
size_mm | [w, h, d][b, h, t] | requiredPflicht | Size, each above 0 and at most 500.Maße, je über 0 und höchstens 500. |
flight_battery_w | numberZahl | 0 | Power taken from the flight battery in W, at most 200.Leistung aus dem Flugakku in W, höchstens 200. |
frontal_area_m2 | numberZahl | 0 | Extra frontal area, at most 0.5.Zusätzliche Stirnfläche, höchstens 0,5. |
leds | integerganze Zahl | 0 | Number of LEDs, 0–64.Anzahl LEDs, 0–64. |
lens | objectObjekt | – | Lens of a camera accessory.Objektiv eines Kamera-Zubehörs. |
lens.x_mm | numberZahl | 0 | Side offset of the lens.Seitlicher Versatz des Objektivs. |
lens.length_mm | numberZahl | 0 | Lens length, 0–100.Objektivlänge, 0–100. |
action_cam | objectObjekt | – | Makes the accessory an action cam (top mount only).Macht das Zubehör zur Action-Cam (nur obere Halterung). |
action_cam.max_height | integerganze Zahl | requiredPflicht | Highest recording height in pixels (1080, 1440 …).Höchste Aufnahmehöhe in Pixeln (1080, 1440 …). |
action_cam.max_fps | integerganze Zahl | requiredPflicht | Highest frame rate.Höchste Bildrate. |
action_cam.stabilization | booleanbool | false | Image stabilisation.Bildstabilisierung. |
action_cam.horizon_levelling | booleanbool | false | Keeps the horizon level.Hält den Horizont gerade. |
action_cam.own_battery_wh | numberZahl | 0 | Own battery in Wh; 0 = runs from the flight battery.Eigener Akku in Wh; 0 = läuft am Flugakku. |
action_cam.record_w | numberZahl | requiredPflicht | Power while recording in W.Leistung beim Aufnehmen in W. |
action_cam.max_record_w | numberZahl | record_w | Power at the highest setting.Leistung bei der höchsten Einstellung. |
action_cam.fov_deg | numberZahl | requiredPflicht | Field of view.Sichtfeld. |
action_cam.image_quality | numberZahl | requiredPflicht | Image quality.Bildqualität. |
action_cam.low_light_noise | numberZahl | requiredPflicht | Noise in the dark.Rauschen im Dunkeln. |
action_cam.sensor_in | number or "1/2.8"Zahl oder "1/2.8" | requiredPflicht | Sensor size in inches.Sensorgröße in Zoll. |
propwash:action_cam_lighteingebaut: propwash:action_cam_light{
"format": 1,
"mass_g": 42.0,
"slot": "top",
"size_mm": [46.0, 30.0, 26.0],
"flight_battery_w": 4.0,
"frontal_area_m2": 0.0014,
"lens": {"x_mm": 0.0, "length_mm": 7.0},
"action_cam": {
"max_height": 1080,
"max_fps": 60,
"stabilization": false,
"horizon_levelling": false,
"own_battery_wh": 0.0,
"record_w": 4.0,
"max_record_w": 4.0,
"fov_deg": 150.0,
"image_quality": 0.8,
"low_light_noise": 0.55,
"sensor_in": "1/2.8"
},
"sort": 1
}
Cell chemistry chemistryZellchemie chemistry
Chemistries are not parts and have no common fields; batteries refer to them by id. Register or load them before the batteries that use them.
Zellchemien sind keine Teile und haben keine gemeinsamen Felder; Akkus verweisen per Id auf sie. Vor den Akkus anmelden oder laden, die sie benutzen.
| FieldFeld | TypeTyp | DefaultStandard | MeaningBedeutung |
|---|---|---|---|
full_v | numberZahl | requiredPflicht | Cell voltage when full.Zellspannung voll geladen. |
nominal_v | numberZahl | requiredPflicht | Nominal cell voltage.Nennspannung der Zelle. |
empty_v | numberZahl | requiredPflicht | Cell voltage when empty.Zellspannung leer. |
cutoff_v | numberZahl | requiredPflicht | Cut-off voltage, at most the empty voltage.Abschaltspannung, höchstens die Leerspannung. |
storage_v | numberZahl | requiredPflicht | Storage voltage, between empty and full.Lagerspannung, zwischen leer und voll. |
density_g_cm3 | numberZahl | requiredPflicht | Density in g/cm³ (for the pack size).Dichte in g/cm³ (für die Akkumaße). |
ocv_shape | 12 numbers12 Zahlen | requiredPflicht | Open-circuit voltage curve: 12 values from 0 to 1, rising, at charge 0, 0.05, 0.1, 0.2 … 1.0.Leerlaufspannungskurve: 12 Werte von 0 bis 1, steigend, bei Ladung 0, 0,05, 0,1, 0,2 … 1,0. |
usable_fraction | numberZahl | 0.88 / 0.85 / 0.80 by voltages0,88 / 0,85 / 0,80 nach Spannungen | Usable share of the capacity down to the landing voltage, 0.5–1.Nutzbarer Anteil der Kapazität bis zur Landespannung, 0,5–1. |
propwash:lipoeingebaut: propwash:lipo{
"format": 1,
"full_v": 4.2,
"nominal_v": 3.7,
"empty_v": 3.5,
"cutoff_v": 3.3,
"storage_v": 3.8,
"density_g_cm3": 2.0,
"usable_fraction": 0.8,
"ocv_shape": [0.0, 0.16, 0.27, 0.33, 0.37, 0.4, 0.43, 0.5, 0.61, 0.73, 0.86, 1.0]
}
Built-in idsEingebaute Ids
Mounts of the built-in parts, to make own parts fit them:
Halterungen der eingebauten Teile, damit eigene Teile dazu passen:
| MountHalterung | Id |
|---|---|
Mounts.MOTOR_M08 | propwash:m08 |
Mounts.MOTOR_M14 | propwash:m14 |
Mounts.MOTOR_M22 | propwash:m22 |
Mounts.MOTOR_M28 | propwash:m28 |
Mounts.STACK_WHOOP_AIO | propwash:whoop_aio |
Mounts.STACK_S20 | propwash:s20 |
Mounts.STACK_S30 | propwash:s30 |
Mounts.PROP_UNIVERSAL | propwash:universal |
Built-in parts and chemistries, for presets that mix them with own parts:
Eingebaute Teile und Zellchemien, für Presets, die sie mit eigenen Teilen mischen:
| CategoryKategorie | Ids |
|---|---|
frame | propwash:whoop_65 propwash:cinewhoop_3 propwash:freestyle_5 propwash:race_5 propwash:long_range_7 |
stack | propwash:aio_whoop propwash:aio_20 propwash:stack_30 propwash:creative_fc |
motor | propwash:m0802_22000 propwash:m1404_4600 propwash:m2004_3000 propwash:m2207_1750 propwash:m2306_1860 propwash:m2807_1300 |
prop | propwash:p31_4b propwash:p31_3b propwash:p3_3b propwash:p51_3b propwash:p7_2b propwash:p51_29_3b |
video | propwash:analog_nano propwash:analog_race propwash:digital_lite propwash:digital_hd |
battery | propwash:b1s_300_hv propwash:b4s_650 propwash:b6s_1100 propwash:b6s_1300 propwash:b6s_4000_lion |
accessory | propwash:led_strip propwash:action_cam_light propwash:action_cam_heavy propwash:action_cam_flashback propwash:gripper |
chemistry | propwash:lihv propwash:lion propwash:lipo |
Example with own armsBeispiel mit eigenen Armen
A deadcat frame from the example add-on: own arm positions and spin directions, the camera far enough in front of the front props, both accessory mounts. "creative": false keeps it out of the creative tab; leave it out for your own parts.
Ein Deadcat-Rahmen aus dem Beispiel-Add-on: eigene Armpositionen und Drehrichtungen, die Kamera weit genug vor den Vorderprops, beide Zubehör-Halterungen. "creative": false hält ihn aus dem Kreativ-Tab; bei eigenen Teilen einfach weglassen.
propwash_example:deadcat_5{
"format": 1,
"mass_g": 118.0,
"creative": false,
"role": "freestyle",
"shape": "deadcat",
"wheelbase_mm": 230,
"max_prop_mm": 130,
"motor_mounts": ["propwash:m22"],
"stack_mounts": ["propwash:s30", "propwash:s20"],
"accessory_mounts": ["top", "bottom"],
"arms": {
"front_left": {"pos": [-95.0, 0.0, -60.0], "spin": "cw"},
"front_right": {"pos": [95.0, 0.0, -60.0], "spin": "ccw"},
"rear_left": {"pos": [-80.0, 0.0, 80.0], "spin": "ccw"},
"rear_right": {"pos": [80.0, 0.0, 80.0], "spin": "cw"}
},
"battery": {"on_top": true, "plate_mm": 30.0},
"electronics_mm": 12.0,
"camera": {"pos": [0.0, 14.0, -100.0], "tilt_deg": 30.0},
"center_of_mass_mm": [0.0, 0.0, 6.0],
"aero": {"frontal_area_m2": 0.012, "drag_coefficient": 0.9},
"impact_tolerance": 8.0,
"battery_fit": {"cells": [4, 6], "max_mass_g": 260.0, "preferred_min_cells": 6, "preferred_min_capacity_mah": 0}
}
Errors and warningsFehler und Warnungen
- Propwash first reads all files. If any has an error,
loadBundledthrows one exception listing every error as file – field: message and registers nothing.Propwash liest zuerst alle Dateien. Hat eine einen Fehler, wirftloadBundledeine Ausnahme mit jedem Fehler als Datei – Feld: Meldung und meldet nichts an. - Unknown fields are not errors: they are logged as a warning and ignored, so a file written for a newer Propwash still loads.Unbekannte Felder sind keine Fehler: Sie landen als Warnung im Log und werden ignoriert, damit eine Datei für ein neueres Propwash trotzdem lädt.
PropwashEvents.PART_REGISTEREDfires for every part (not for chemistries).PropwashEvents.PART_REGISTEREDfeuert für jedes Teil (nicht für Zellchemien).
Check a file without starting the game: PropwashApi.parts().fromJson(kind, id, json) throws an IllegalArgumentException naming the field. The online configurator reads Just More Parts in this format too.
Eine Datei ohne Spielstart prüfen: PropwashApi.parts().fromJson(kind, id, json) wirft eine IllegalArgumentException, die das Feld nennt. Der Online-Konfigurator liest Just More Parts ebenfalls in diesem Format.