DonBruce64 / MinecraftTransportSimulator

A Minecraft mod that adds planes and automobiles with realistic physics!
Other
106 stars 59 forks source link

[Backburner] Errors with `conditionalDefaultParts` #1744

Open DrprofLuigi opened 6 months ago

DrprofLuigi commented 6 months ago

These errors are present in MTS V22.12.0

Note: Both of these issues are somewhat minor as I have made workarounds for both, so this is more of a 'it would be cleaner' sort of suggestions.

Issue 1

When I place a vehicle that spawns with a bed, which itself spawns with a spare wheel, that spare wheel spawns as the wrong color:

2023-12-16_10 16 23

Here are the relevant json snippets:

UNU Mule (base vehicle)

        {
            "name" : "§3UNU Mule §7[ZF-174-MCG]",
            "subName" : "_forrest",
            "partTones": ["_forrest", "_saddle", "_blackthorne", "_forrest"],
            "constants": ["axle_budd", "axle_double", "wheel_truck_budd_forrest", "truckbed_cargo"],
            "extraMaterials" : ["minecraft:dye:0:1", "minecraft:dye:2:3"]
        }
        {
            "pos": [0, 0.5, -0.65625],
            "types": ["generic_bodypart_unu_truckbed_heavy_double", "generic_bodypart_unu_truckbed_mule_double"],
            "conditionalDefaultParts": {
                "truckbed_cargo"="unumilitary:unumilitary_bodypart_unu_truckbed_mule_cargo_desert"
            },
            "toneIndex": 4,
            "minValue": 0,
            "maxValue": 3,
            "interactableVariables": [["!part_present_38"], ["!part_present_39"], ["part_present_35"]],
            "applyAfter": "$FrameBed"
        }

Cargobed (part):

        {
            "name" : "§3UNU Mule Cargo Bed",
            "subName" : "_desert",
            "partTones": ["_desert", "_saddle", "_blackthorne"],
            "extraMaterials" : ["minecraft:dye:0:1", "minecraft:dye:11:3"]
        }
        {
            "pos": [0.9375, -0.1875, 1.125],
            "rot": [0, 0, 115],
            "allowParentRemoval": true,
            "isSpare": true,
            "types": ["ground_wheel_budd"],
            "defaultPart": "unuparts:unuparts_part_unu_wheel_truck_budd",
            "conditionalDefaultParts": {
                "wheel_truck_budd_desert"="unuparts:unuparts_part_unu_wheel_truck_budd_desert",
                "wheel_truck_budd_forrest"="unuparts:unuparts_part_unu_wheel_truck_budd_forrest",
                "wheel_truck_budd_winter"="unuparts:unuparts_part_unu_wheel_truck_budd_winter"
            },
            //"toneIndex": 1,
            "minValue": 0.625,
            "maxValue": 1.25
        }

Note: I tried using partTones, but it had the same result.

When I change the conditionalDefaultParts bed to the winter variant, the problem goes away.

Explanation: When the bed spawns, it first spawns as the Desert variant, setting the desert variable, THEN the bed switches to the appropriate color, but the spare tire does not. This is because the winter variable gets set, but the desert/forrest variable is ALSO true, so it spawns whichever comes first, which is the correct color.

2023-12-16_10 08 09

Issue 2

A vehicle will spawn with this second axle present, even though it shouldn't:

2023-12-16_10 17 52

Here are the relevent json snippets:

        {
            "name": "§3UNU Camel Firetruck (Red) §7[TB-313-MCC]",
            "subName": "firetruck_red",
            "textureName": "unucivil_vehicle_unu_camel_red",
            "partTones": ["", "_saddle", "_blackthorne", "_red"],
            "secondaryTextColors": ["#CF9E4F", "#FEFEF0", "#FEFEF0"],
            "constants": ["axle_budd", "truckbed_firetruck", "gyrophare_l_blue", "gyrophare_r_blue"],
            "extraMaterials": ["minecraft:dye:1:5"]
        }
        {
            "pos": [0, 0, -1.3125],
            "types": ["generic_suspension_unu_leaf_heavy_back", "generic_bodypart_unu_suspension_camel_back"],
            "conditionalDefaultParts": {
                "!axle_double"="",
                "axle_budd"="unuparts:unuparts_suspension_unu_leaf_heavy_back_budd",
                "axle_dayton"="unuparts:unuparts_suspension_unu_leaf_heavy_back_dayton"
            },
            "minValue": 0,
            "maxValue": 1,
            "interactableVariables": [["!part_present_18"]],
            //"lockingVariables": [["!part_present_22"]],
            "applyAfter": "$FrameBed",
            "constantValues": {
                "frame_axleIsSecondary": 1,
                "frame_driveshaft_x": 0.001,
                "frame_driveshaft_y": 0.001,
                "frame_driveshaft_z": 1.15625
            }
        }

The first entry is "!axle_double"="", so the part slot should be empty if axle_double is zero. Similar logic works with my standard wheels to prevent a hubcap from spawning on spare tires:

2023-12-16_10 18 03

            "conditionalDefaultParts": {
                "spare_hubcap_moon"="unuparts:unuparts_part_unu_hubcap_standard_moon",
                "spare_hubcap_dish"="unuparts:unuparts_part_unu_hubcap_standard_dish",
                "spare_hubcap_deluxe"="unuparts:unuparts_part_unu_hubcap_standard_deluxe",
                "spare_hubcap_turbine"="unuparts:unuparts_part_unu_hubcap_standard_turbine",
                "part_isspare"="",
                "hubcap_moon"="unuparts:unuparts_part_unu_hubcap_standard_moon",
                "hubcap_dish"="unuparts:unuparts_part_unu_hubcap_standard_dish",
                "hubcap_deluxe"="unuparts:unuparts_part_unu_hubcap_standard_deluxe",
                "hubcap_turbine"="unuparts:unuparts_part_unu_hubcap_standard_turbine"
            }

My guess is that ! is not recognized in conditionalDefaultParts.